第十六章 應(yīng)用的構(gòu)造

應(yīng)用束

應(yīng)用束的構(gòu)造
Cocoa應(yīng)用會(huì)將可執(zhí)行文件或必要的資源格式保存在一個(gè)委托結(jié)構(gòu)中而线,這稱為應(yīng)用束(application bundle),應(yīng)用包裝(wrapper)或應(yīng)用包嗡官。

像這樣箭窜,將幾個(gè)文件或目錄以確定的形式保存到目錄結(jié)構(gòu)中,然后再作為一個(gè)集合進(jìn)行處理衍腥,在Cocoa中是很常見(jiàn)的方法磺樱。這樣的結(jié)構(gòu)一般稱為束。

nib文件和各語(yǔ)言資源
使用Xcode(Interface Builder)生成的GUI定義被寫到nib文件中紧阔。nib文件的后綴為“nib”坊罢,也就是Next Interface Builder。應(yīng)用的菜單和窗口組件的配置等信息會(huì)被歸檔化擅耽,并在執(zhí)行時(shí)被動(dòng)態(tài)讀入活孩。

nib文件的后綴名為“nib”或“xib”,xib是XML格式文件乖仇,兩種后綴的文件內(nèi)容相同憾儒,在構(gòu)建應(yīng)用時(shí),會(huì)作為帶有后綴“nib”的資源文件保存在應(yīng)用束中乃沙。

Storyboard是以場(chǎng)景移動(dòng)為中心來(lái)構(gòu)造GUI的起趾,所以比較適合邊顯示邊處理這樣的應(yīng)用的架構(gòu)。在各場(chǎng)景內(nèi)部警儒,對(duì)象間的關(guān)系和nib文件相同训裆。在應(yīng)用被構(gòu)建的同時(shí),Storyboard內(nèi)部也會(huì)變?yōu)閚ib文件資源蜀铲。

與語(yǔ)言無(wú)關(guān)的共享資源在Mac OS系統(tǒng)中被放置在Resources目錄下边琉,在iOS系統(tǒng)下則被放置在應(yīng)用束目錄下。根據(jù)所選擇的語(yǔ)言種類來(lái)切換的資源被放置在“語(yǔ)言名.lproj”目錄下记劝。后綴來(lái)自于language project变姨,并從NeXTstep時(shí)期開始使用。

應(yīng)用在運(yùn)行時(shí)厌丑,會(huì)在運(yùn)行環(huán)境中查找選擇的(或是高優(yōu)先度的)語(yǔ)言子目錄定欧,并使用其中的資源渔呵。NSBundle類執(zhí)行資源檢索,因此程序就不需要記錄指定語(yǔ)言的編碼砍鸠。

使應(yīng)用能夠?qū)?yīng)特定語(yǔ)言的過(guò)程稱為本地化(localize)扩氢。在Cocoa應(yīng)用中,如果能在編程時(shí)使之對(duì)應(yīng)多種語(yǔ)言,那么之后只需在應(yīng)用束中追加特定語(yǔ)言的資源就能簡(jiǎn)單的實(shí)現(xiàn)本地化期贫。

信息文件的主要內(nèi)容
使用應(yīng)用束時(shí),信息內(nèi)文件關(guān)鍵詞CFBundleIdentifier指定的字符串稱為應(yīng)用標(biāo)識(shí)符(application identifier),該標(biāo)識(shí)符常被用來(lái)在系統(tǒng)中尋找相應(yīng)的應(yīng)用程序庸推。為了不產(chǎn)生重名,推薦使用Java的包定義方式另萤。例如:com.apple.iPhoto浑槽。

通過(guò)NSBundle訪問(wèn)資源
NSBundle是為各種束提供接口的類,可以從指定的束中搜索有GUI定義的nib文件领舰,圖像夫嗓,聲音,加載代碼等冲秽。

  • (NSBundle *)mainBundle
    //程序所包含的應(yīng)用束也稱為主束舍咖,該方法返回魚主束的路徑相對(duì)應(yīng)的對(duì)象。不能識(shí)別時(shí)返回nil锉桑。

  • (NSBundle *)bundleWithPath:(NSString *)path
    //返回path指定路徑的束對(duì)象排霉,沒(méi)有path可訪問(wèn)的束時(shí)返回nil。此外還有使用NSURL指定位置的方法BundleWithURL:

  • (NSString *)bundleIdentifier
    //返回信息文件(info.plist)中指定的應(yīng)用程序名

  • (NSDictionary *)infoDictionary
    //將信息文件(info.plist)的內(nèi)容作為字典對(duì)象返回

  • (id)objectForInfoDictionaryKey:(NSString *)key
    //在信息文件中返回以參數(shù)key為鍵值的對(duì)象民轴」ツ可能的話將其本地化后返回

  • (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension
    //在接收者的束內(nèi),返回name指定的名字和extension指定的有后綴的資源路徑名后裸。文件沒(méi)有后綴時(shí)瑰钮,將extension指定為nil或@“”。找不到文件時(shí)返回nil微驶。同樣也有使用NSURL返回位置的方法URLForResource:withExtension:浪谴。獲取保存資源的路徑可以采用resourcePath方法。

此外因苹,在Mac OS平臺(tái)中苟耻,可以利用pathForImageResource:方法獲得圖像路徑。它是Application框架中被作為范疇添加到NSBundle中的方法容燕。其他nib文件或聲音文件的獲取方法請(qǐng)參考“NSBundle Additions Refrerence”梁呈。

iOS中的資源訪問(wèn)
如前所述,iOS中也可以使用NSBundle方法來(lái)訪問(wèn)資源蘸秘。但是官卡,因?yàn)閕OS有特殊的后綴蝗茁,所以這里先介紹一下概要。

在iOS中寻咒,為了適應(yīng)所有的設(shè)備哮翘,nib文件的內(nèi)容和圖像的大小就必須要改變,下面有一種指定方法毛秘,即根據(jù)所使用的設(shè)備來(lái)自動(dòng)選擇資源或參數(shù)饭寺。

1.按設(shè)備準(zhǔn)備任意資源
在iOS中,當(dāng)束的檢索請(qǐng)求被指定為“文件名.后綴”這樣的文件時(shí)叫挟,就會(huì)搜索如下的文件艰匙。文件名~設(shè)備.后綴

2.準(zhǔn)備高像素圖片
文件名@2x.后綴名
文件名@2x~設(shè)備.后綴名(兼容上述設(shè)備指定時(shí))
UIKit框架中使用類UIImage來(lái)處理圖像。該類可以使用如下方法檢索并加載主束內(nèi)的圖片文件抹恳,生成包含圖片的實(shí)例员凝。

  • (UIImage)imageNamed:(NSString *)name

3.使用信息文件的鍵值字符串指定設(shè)備
為了和設(shè)備相匹配,可以詳細(xì)設(shè)置信息文件中讀入的信息奋献。
在一般的鍵值字符串后加上后綴“~設(shè)備”健霹,即可表示僅此設(shè)備適用。關(guān)于iOS資源的詳細(xì)內(nèi)容瓶蚂,請(qǐng)參考“iOS Application Programming Guide”“iPad Programming Guide”“Resource Programming Guide”等參考文檔糖埋。

通用二進(jìn)制
通用二進(jìn)制(universal binary)是蘋果公司的專門術(shù)語(yǔ),是為了能在多個(gè)操作系統(tǒng)不同的CPU上運(yùn)行而生成的可執(zhí)行文件形式窃这。

加載nib文件

nib文件實(shí)例化
nib文件定義了GUI組件間的通信消息瞳别,其中必須有一個(gè)稱為所有者的對(duì)象。所有者就是連接nib文件內(nèi)的對(duì)象群和外部世界的橋梁钦听。nib文件的訪問(wèn)基本上都是通過(guò)所有者來(lái)傳達(dá)的洒试。

nib文件是對(duì)象圖的歸檔,所有者的作用就相當(dāng)于根對(duì)象朴上。但是nib文件也可以生成無(wú)指向的指針對(duì)象垒棋。

在Mac OS中加載nib文件

  • (BOOL)loadNibNamed:(NSString *)aNibName owner:(id)owner
    //在束內(nèi)查找字符串指定的nib文件(不需要后綴名),并將所有者對(duì)象owner實(shí)例化痪宰。如果失敗就返回NO叼架。

在使用引用計(jì)數(shù)的管理方式管理內(nèi)存時(shí),nib文件內(nèi)的所有(除了所有者)對(duì)象都會(huì)被引用計(jì)數(shù)置為1并被實(shí)例化衣撬。接著乖订,構(gòu)造對(duì)象間的引用關(guān)系,被其他對(duì)象持有的對(duì)象則通過(guò)autorelease來(lái)釋放所有者關(guān)系具练。如果nib文件中存在沒(méi)有被引用的對(duì)象乍构,那么最終只有該對(duì)象不會(huì)被釋放,所以就需要使用其他方法來(lái)釋放內(nèi)存扛点。

使用垃圾回收時(shí)哥遮,所有者強(qiáng)引用的對(duì)象因?yàn)榭梢栽L問(wèn)所以沒(méi)有任何問(wèn)題岂丘。而如果nib文件中存在沒(méi)有被引用的對(duì)象,那么該對(duì)象在實(shí)例化后就有被釋放的危險(xiǎn)眠饮。

在iOS中加載nib文件

  • (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options
    //在束內(nèi)查找字符串命名的nib文件奥帘,并將所有者對(duì)象owner實(shí)例化。參數(shù)options中可以指定選項(xiàng)仪召,一般置為nil寨蹋。在nib文件中,沒(méi)有被其他對(duì)象包含的對(duì)象(頂級(jí)對(duì)象)將用數(shù)組保存并返回扔茅。
    在iOS中已旧,nib文件內(nèi)的所有(除了所有者)對(duì)象都會(huì)被引用計(jì)數(shù)置為1并被實(shí)例化。接著咖摹,構(gòu)筑對(duì)象間的引用關(guān)系评姨,被其他對(duì)象持有的對(duì)象則通過(guò)autorelease來(lái)釋放所有者關(guān)系。使用鍵值編碼的setValue:forKey:方法來(lái)設(shè)定對(duì)象的出口萤晴。需要明確出口所使用的實(shí)例變量的引用,存儲(chǔ)方式時(shí)胁后,請(qǐng)準(zhǔn)備設(shè)置或聲明屬性店读。

nib文件內(nèi)的包含循環(huán)
使用ARC管理內(nèi)存時(shí),nib文件內(nèi)的對(duì)象之間容易形成包含循環(huán)攀芯,這一點(diǎn)一定要注意避免屯断。

自定義對(duì)象包含的出口原則上應(yīng)該通過(guò)弱引用才能使用。

一定要注意不要有空指針侣诺,不管是否是弱引用殖演,在釋放對(duì)象前,都需要將引用其他對(duì)象的實(shí)例變量賦值為nil年鸳。

nib文件內(nèi)對(duì)象的初始化
nib文件內(nèi)包含的對(duì)象如果實(shí)現(xiàn)了如下方法趴久,在實(shí)例化后該方法就會(huì)運(yùn)行。

  • (void)awakeFromNib
    //從nib文件中讀出搔确,在完成實(shí)例化彼棍,出口及訪問(wèn)的連接后調(diào)用該方法。該方法被聲明為非正式協(xié)議膳算。

啟動(dòng)應(yīng)用
應(yīng)用最先讀入的nib文件中座硕,保存著菜單等運(yùn)行應(yīng)用所需要的重要信息,這稱為主nib文件涕蜂,信息文件中也有文件名华匾,該文件在應(yīng)用啟動(dòng)后運(yùn)行回路啟動(dòng)前被讀入。

NSApplication實(shí)例在應(yīng)用啟動(dòng)后僅被生成一個(gè)机隙,除運(yùn)行回路外蜘拉,還負(fù)責(zé)管理應(yīng)用的各種資源萨西。

Mac OS 應(yīng)用:
int NSApplicationMain(int argc, char *argv[]) {
[NSApplication sharedApplication];
//生成NSApplication實(shí)例

if ([NSBundle loadNibName:主nib名 owner:NSApp]) //加載主nib文件
    [NSApp run];  //啟動(dòng)運(yùn)行回路

}

此外,應(yīng)用中所固有的各種初始化設(shè)置诸尽,不需要放在main函數(shù)中原杂,而是應(yīng)該寫到NSApplication和UIApplication的委托對(duì)象中。應(yīng)用啟動(dòng)后您机,由于通知啟動(dòng)完成的消息會(huì)被送給委托對(duì)象穿肄,因此應(yīng)在委托內(nèi)部書寫。詳情請(qǐng)參考NSApplicationDelegate協(xié)議和UIApplicationDelegate協(xié)議的參考文檔

iOS的文件保存場(chǎng)所

主要目錄及其功能
在iOS中际看,為了安全起見(jiàn)咸产,應(yīng)用間的交換等會(huì)受到限制。文件保存的場(chǎng)所被局限在了各應(yīng)用所分配的特定場(chǎng)所中仲闽。該場(chǎng)所在應(yīng)用安裝時(shí)被決定脑溢,稱為home目錄。應(yīng)用程序包及生成的文件被保存在home目錄下赖欣,刪除應(yīng)用時(shí)會(huì)將其一并刪除屑彻。

應(yīng)用的home目錄下設(shè)置著主要目錄,各目錄具有不同的功能顶吮,所有路徑名都是固定的社牲,在這些文件夾中創(chuàng)建的文件,必須由應(yīng)用程序來(lái)管理悴了。不需要的文件會(huì)被刪除搏恤。

1.home/應(yīng)用名.app/
應(yīng)用束本身存放在這里。因?yàn)橛惺鹈圆荒芨淖儭?br> 2.home/Documents/
應(yīng)用生成并保存文件的場(chǎng)所湃交。與iTunes連接時(shí)啟動(dòng)備份熟空。而且將信息文件的鍵值UIFileSharingEnabled設(shè)定為YES后,就可以通過(guò)iTunes使文件和電腦同步搞莺。
3.home/Library/Preferences/
應(yīng)用設(shè)定被寫入息罗。與iTunes連接時(shí)被備份。
4.home/Library/Caches/
能夠?qū)?yīng)用臨時(shí)使用的信息作為文件保存在這里腮敌。在下一次啟動(dòng)時(shí)加載可以利用的操作歷史或操作過(guò)程等信息阱当。但是,在設(shè)備還原等時(shí)可能會(huì)隨時(shí)消失糜工。iTunes不會(huì)備份弊添。
5.home/tmp/
能夠?qū)?yīng)用臨時(shí)使用的信息作為文件保存在這里。在應(yīng)用不運(yùn)行期間可能會(huì)被系統(tǒng)釋放捌木。

獲取目錄路徑
在獲取上述目錄中的Documents和Caches的路徑時(shí)油坝,推薦使用Foundation框架的函數(shù)NSSearchPathForDirectoriesInDomains()。函數(shù)和使用的參數(shù)在Foundation/NSPathUtilities.h中聲明。
NSArray *NSSearchPathForDirectoriesInDomains(
NSSearchDirectory directory,
NSSearchPathDomainMask domainMask,
BOOL expandTilde
)

該函數(shù)本來(lái)是在Mac OS專用的澈圈,形參參數(shù)的組合在iOS中可能沒(méi)有意義彬檀。而且,由于返回?cái)?shù)組中之保存有一個(gè)路徑瞬女,所以請(qǐng)使用objectAtIndex:方法將首部的元素取出使用窍帝。第一個(gè)形參中指定目錄的種類。為了獲得Documents和Caches的路徑诽偷,請(qǐng)分別指定參數(shù)NSDocumentDirectory和NSCachesDirectory坤学。無(wú)論哪種情況,都請(qǐng)指定第二個(gè)形參為NSUserDomainMask报慕,第三個(gè)形參味YES深浮。而且tmp目錄的路徑可使用下面的函數(shù)獲取:NSString *NSTemporaryDirectory(void)眠冈。

用戶默認(rèn)

保存設(shè)定值
在Cocoa應(yīng)用中飞苇,為了保存用戶設(shè)定的設(shè)定值而使用了一種通用結(jié)構(gòu)—用戶默認(rèn)(user defaults),或者稱為默認(rèn)數(shù)據(jù)庫(kù)蜗顽。類NSUserDefaults提供了訪問(wèn)用戶默認(rèn)所需的接口布卡。詳情參考官方文檔。

默認(rèn)域
用戶默認(rèn)可以被分為多個(gè)組考慮雇盖,這些組稱為域或默認(rèn)域(defaults domain)羽利。在域中,有的將內(nèi)容保存在文件中并在之后繼續(xù)使用刊懈,而有的則僅在應(yīng)用啟動(dòng)時(shí)存在。下面將詳細(xì)說(shuō)明:

  1. 應(yīng)用域
    使用屬性列表管理的應(yīng)用固有的設(shè)定值的集合娃闲。該設(shè)定值的集合稱為應(yīng)用域虚汛,域名中使用應(yīng)用標(biāo)識(shí)名。
  2. 全局域
    使用者使用賬戶設(shè)定的各個(gè)應(yīng)用共享的設(shè)定值皇帮。域名為NSGlobalDomain卷哩。該域在iOS中也有效,可以獲得設(shè)定的語(yǔ)言或鍵盤信息属拾。
  3. 形參域
    參數(shù)指定的設(shè)定值組就稱為參數(shù)域(argument domain)将谊。域名用NSArgumentDomain表示,且不能被保存在文件中渐白。iOS中不使用該域尊浓。
  4. 語(yǔ)言域
    指定使用語(yǔ)言時(shí)會(huì)生成該語(yǔ)言名(例如ch)為域名的臨時(shí)域(不保存文件)。
  5. 登陸域
    用戶尚未設(shè)定應(yīng)用的各種設(shè)定值時(shí)使用的默認(rèn)值集合纯衍。域名為NSRegistrationDomain栋齿,且不被保存在文件中。
    當(dāng)應(yīng)用使用NSUserDefaults類從從鍵值中查找對(duì)應(yīng)的設(shè)定值時(shí),會(huì)按如下順序查找上述5個(gè)域瓦堵,并使用最先找到的值基协。
    參數(shù)域 應(yīng)用域 全局域 語(yǔ)言域 登陸域
    如果各種設(shè)定值都需要默認(rèn)值,可以將鍵和值的集合以字典方式組織菇用,并在應(yīng)用初始化時(shí)在登陸域中登陸澜驮。因?yàn)榈顷懹虿檎以谧詈髨?zhí)行,因此惋鸥,當(dāng)其他域都不能登錄時(shí)杂穷,就只能使用默認(rèn)值。

查找用戶默認(rèn)的工具
Mac OS 平臺(tái)下揩慕,用戶默認(rèn)除了在各個(gè)應(yīng)用中使用外亭畜,還可以通過(guò)直接編輯屬性列表,或使用命令行工具defaults來(lái)進(jìn)行訪問(wèn)迎卤。只在終端上輸入defaults就可以看到使用方法拴鸵,也可以使用man命令查看幫助手冊(cè)。

NSUserDefaults概要

  1. 取得實(shí)例對(duì)象
  • (NSUserDefaults *)standardUserDefaults
    //最初調(diào)用時(shí)將實(shí)例初始化后返回蜗搔。自第二次調(diào)用起劲藐,會(huì)返回同一個(gè)實(shí)例。
  1. 取出鍵對(duì)應(yīng)的值
    要取出鍵對(duì)應(yīng)的值樟凄,可在NSUserDefaults實(shí)例中使用如下方法聘芜。
  • (id)objectForKey:(NSString *)defaultName

  • (NSString *)stringForKey:(NSString *)defaultName

  • (NSArray *)stringArrayForKey:(NSString *)defaultName

  • (NSInteger)integerForKey:(NSString *)defaultName

  1. 指定鍵并設(shè)置刪除
  • (void)setObject:(nullable id)value forKey:(NSString *)defaultName;

  • (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;

  • (void)setURL:(nullable NSURL *)url forKey:(NSString *)defaultName;

  1. 設(shè)定默認(rèn)值
  • (void)registerDefaults:(NSDictionary *)registrationDictionary;
  1. 取出域內(nèi)容
  • (NSDictionary *)dictionaryRepresentation;
  1. 在文件中顯示設(shè)定內(nèi)容
  • (BOOL)synchronize;

應(yīng)用的本地化

消息的本地化
使用束結(jié)構(gòu)可以將程序顯示的消息與各種語(yǔ)言相對(duì)應(yīng)。為此缝龄,首先需要生成Localizable.strings文件汰现,并將其保存到各語(yǔ)言對(duì)應(yīng)的目錄(語(yǔ)言.lprog)中。文件名也可以為別的名字叔壤,不特別指定時(shí)使用Localizable.strings瞎饲。

Localizable.strings文件是將鍵字符串及鍵值字符串用等號(hào)連接成一對(duì),并在結(jié)尾設(shè)置分號(hào)炼绘。鍵和值都要用“”括起來(lái)嗅战。也可省略值,但也要同時(shí)刪除等號(hào)俺亮。值即使被省略驮捍,鍵本身也仍然會(huì)被當(dāng)成入口值。此外脚曾,也可以用/**/的形式來(lái)書寫命令东且。

鍵字符串一般使用ASCII碼,值字符串使用目標(biāo)語(yǔ)言(漢語(yǔ)等)斟珊。文件一定要使用UTF-16編碼苇倡。如果僅僅使用ASCII碼范圍內(nèi)的字符就可以記錄全部時(shí)富纸,保持ASCII編碼方式即可。

應(yīng)用本身的束(主束)的NSBundle對(duì)象旨椒,通過(guò)下面的消息晓褪,可以取得鍵值字符串。

  • (NSString *)localizedStringForKey:(NSString *)key value:(nullable NSString *)value table:(nullable NSString *)tableName

NSLocalizedString(key, comment); //oc方式下不使用comment

NSLocalizedStringFromTable(key, tbl, comment); //oc方式下不使用comment

本地化指針
使用日語(yǔ)和英語(yǔ)不同综慎,顯示消息不能用日語(yǔ)編碼涣仿。即使只構(gòu)建日語(yǔ)應(yīng)用時(shí)也需要Localizable.strings。該文件以及定義了GUI的nib文件示惊,幫助等好港,包含日語(yǔ)的文件全都應(yīng)該被保存在ja.lproj目錄下。

如果僅僅是英語(yǔ)應(yīng)用米罚,則不需要擔(dān)心本地化钧汹。包括英語(yǔ)在內(nèi),面向各語(yǔ)言的子目錄和Localizable.strings基本上都不是必須的录择。但是拔莱,這樣的應(yīng)用被認(rèn)為沒(méi)有被國(guó)際化(internationalize)。相反隘竭,將這樣的應(yīng)用在事后進(jìn)行國(guó)際化或本地化是非常困難的塘秦。因?yàn)橄⑹菍懺谠闯绦蚶锩娴模员仨氁褂肗SLocalizedString()等來(lái)修改动看。

本地化
本地化(locale)就是編輯文本時(shí)的各種習(xí)慣或使用單位等的集合體尊剔。例如,表示日期的方式菱皆,作為小數(shù)點(diǎn)使用的字符等须误,根據(jù)國(guó)家和語(yǔ)言的不同是存在差異的。為了生成在任何語(yǔ)言環(huán)境下都能通用的軟件仇轻,就需要事先準(zhǔn)備好這些字體霹期,然后再在軟件操作時(shí)選擇適合的顯示。

為了表示本地化拯田,Cocoa環(huán)境提供了NSLocale類,當(dāng)創(chuàng)建可以應(yīng)對(duì)各種語(yǔ)言或地域習(xí)慣的應(yīng)用時(shí)甩十,就可以使用該類船庇。用戶根據(jù)使用環(huán)境而選擇的本地化信息稱為當(dāng)前本地化,應(yīng)用使用當(dāng)前本地化進(jìn)行操作侣监。

消息內(nèi)的語(yǔ)序:
通常鸭轮,格式字符串內(nèi)的格式符(%s等)可以與后面的參數(shù)依次對(duì)應(yīng)。通過(guò)在格式符%后指定“數(shù)字”+“$”橄霉,就可以將數(shù)字指定順序的參數(shù)窃爷,在該位置處發(fā)生變換。例如:下面的printf就會(huì)輸出“Good:100”。
printf("%2$s: %1$d\n", 100, "Good");

模塊的動(dòng)態(tài)加載

該功能無(wú)法在iOS中使用按厘。僅在Mac OS中可以使用医吊。

沙盒(App Sandbox)
App Store中出售,發(fā)布的Mac OS應(yīng)用為了強(qiáng)化其安全性逮京,必須使用App SandBox來(lái)實(shí)現(xiàn)卿堂。沙盒就是只能在預(yù)先設(shè)定好的權(quán)限條件下運(yùn)行的應(yīng)用執(zhí)行環(huán)境。在開發(fā)和使用App SandBox的應(yīng)用時(shí)懒棉,會(huì)在Xcode中設(shè)置它應(yīng)該具有什么資格草描。例如,是否可以讀寫文件策严,是否可以訪問(wèn)網(wǎng)絡(luò)穗慕,是否可以使用系統(tǒng)攝像頭等。由于這些被放入了代碼署名中妻导,因此即使受到惡意影響逛绵,也不能執(zhí)行預(yù)先設(shè)定之外的動(dòng)作。而且栗竖,與iOS相同暑脆,應(yīng)用可以讀寫文件的場(chǎng)所也收到了限定。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐肢,一起剝皮案震驚了整個(gè)濱河市添吗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份名,老刑警劉巖碟联,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異僵腺,居然都是意外死亡鲤孵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門辰如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)普监,“玉大人,你說(shuō)我怎么就攤上這事琉兜】” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵豌蟋,是天一觀的道長(zhǎng)廊散。 經(jīng)常有香客問(wèn)我,道長(zhǎng)梧疲,這世上最難降的妖魔是什么允睹? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任运准,我火速辦了婚禮,結(jié)果婚禮上缭受,老公的妹妹穿的比我還像新娘胁澳。我一直安慰自己,他們只是感情好贯涎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布听哭。 她就那樣靜靜地躺著,像睡著了一般塘雳。 火紅的嫁衣襯著肌膚如雪陆盘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天败明,我揣著相機(jī)與錄音隘马,去河邊找鬼。 笑死妻顶,一個(gè)胖子當(dāng)著我的面吹牛酸员,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讳嘱,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼幔嗦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了沥潭?” 一聲冷哼從身側(cè)響起邀泉,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钝鸽,沒(méi)想到半個(gè)月后汇恤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拔恰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年因谎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜懊。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡财岔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出河爹,到底是詐尸還是另有隱情使鹅,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布昌抠,位于F島的核電站,受9級(jí)特大地震影響鲁僚,放射性物質(zhì)發(fā)生泄漏炊苫。R本人自食惡果不足惜裁厅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侨艾。 院中可真熱鬧执虹,春花似錦、人聲如沸唠梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)当叭。三九已至茬故,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚁鳖,已是汗流浹背磺芭。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醉箕,地道東北人钾腺。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像讥裤,于是被迫代替她去往敵國(guó)和親放棒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,125評(píng)論 29 470
  • 關(guān)于資源 適用于計(jì)算機(jī)程序的資源是與程序可執(zhí)行代碼相關(guān)的數(shù)據(jù)文件己英。資源可以通過(guò)將代碼之外的復(fù)雜數(shù)據(jù)集或圖形內(nèi)容創(chuàng)建...
    nicedayCoco閱讀 626評(píng)論 0 0
  • 譯者注:本文是對(duì) Apple 官方文檔的翻譯间螟,原文地址為:https://developer.apple.com/...
    ampire_dan閱讀 7,393評(píng)論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)剧辐,斷路器寒亥,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,869評(píng)論 6 13