面試題

1.怎么用 copy 關(guān)鍵字?

用途:
NSString霎挟、NSArray、NSDictionary 等等經(jīng)常使用copy關(guān)鍵字,是因?yàn)樗麄冇袑?duì)應(yīng)的可變類型:NSMutableString汤纸、NSMutableArray、NSMutableDictionary芹血;
block 也經(jīng)常使用 copy 關(guān)鍵字贮泞。
說(shuō)明:
block 使用 copy 是從 MRC 遺留下來(lái)的“傳統(tǒng)”,在 MRC 中,方法內(nèi)部的 block 是在棧區(qū)的,使用 copy 可以把它放到堆區(qū).在 ARC 中寫不寫都行:對(duì)于 block 使用 copy 還是 strong 效果是一樣的,但寫上 copy 也無(wú)傷大雅幔烛,還能時(shí)刻提醒我們:編譯器自動(dòng)對(duì) block 進(jìn)行了 copy 操作啃擦。如果不寫 copy ,該類的調(diào)用者有可能會(huì)忘記或者根本不知道“編譯器會(huì)自動(dòng)對(duì) block 進(jìn)行了 copy 操作”饿悬,他們有可能會(huì)在調(diào)用之前自行拷貝屬性值令蛉。這種操作多余而低效。

2.系統(tǒng)對(duì)象的 copy 與 mutableCopy 方法

不管是集合類對(duì)象(NSArray狡恬、NSDictionary珠叔、NSSet ... 之類的對(duì)象)袱蚓,還是非集合類對(duì)象(NSString, NSNumber ... 之類的對(duì)象)蚓曼,接收到copy和mutableCopy消息時(shí),都遵循以下準(zhǔn)則:

copy 返回的是不可變對(duì)象(immutableObject)嗽桩;如果用copy返回值調(diào)用mutable對(duì)象的方法就會(huì)crash兔乞。
mutableCopy 返回的是可變對(duì)象(mutableObject)汇鞭。
一、非集合類對(duì)象的copy與mutableCopy
在非集合類對(duì)象中庸追,對(duì)不可變對(duì)象進(jìn)行copy操作霍骄,是指針復(fù)制,mutableCopy操作是內(nèi)容復(fù)制锚国;
對(duì)可變對(duì)象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制腕巡。用代碼簡(jiǎn)單表示如下:
NSString str = @"hello word!";
NSString strCopy = [str copy] // 指針復(fù)制,strCopy與str的地址一樣
NSMutableString *strMCopy = [str mutableCopy] // 內(nèi)容復(fù)制血筑,strMCopy與str的地址不一樣
NSMutableString mutableStr = [NSMutableString stringWithString: @"hello word!"];
NSString strCopy = [mutableStr copy] // 內(nèi)容復(fù)制
NSMutableString *strMCopy = [mutableStr mutableCopy] // 內(nèi)容復(fù)制

二绘沉、集合類對(duì)象的copy與mutableCopy (同上)
在集合類對(duì)象中,對(duì)不可變對(duì)象進(jìn)行copy操作豺总,是指針復(fù)制车伞,mutableCopy操作是內(nèi)容復(fù)制;
對(duì)可變對(duì)象進(jìn)行copy和mutableCopy都是內(nèi)容復(fù)制喻喳。但是:集合對(duì)象的內(nèi)容復(fù)制僅限于對(duì)象本身另玖,對(duì)集合內(nèi)的對(duì)象元素仍然是指針復(fù)制。(即單層內(nèi)容復(fù)制)
NSArray arr = @[@[@"a", @"b"], @[@"c", @"d"];
NSArray copyArr = [arr copy]; // 指針復(fù)制
NSMutableArray *mCopyArr = [arr mutableCopy]; //單層內(nèi)容復(fù)制

NSMutableArray array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
NSArray copyArr = [mutableArr copy]; // 單層內(nèi)容復(fù)制
NSMutableArray *mCopyArr = [mutableArr mutableCopy]; // 單層內(nèi)容復(fù)制

【總結(jié)一句話】:
只有對(duì)不可變對(duì)象進(jìn)行copy操作是指針復(fù)制(淺復(fù)制),其它情況都是內(nèi)容復(fù)制(深復(fù)制)谦去!

3.這個(gè)寫法會(huì)出什么問(wèn)題:@property (nonatomic, copy) NSMutableArray *arr;

問(wèn)題:添加,刪除,修改數(shù)組內(nèi)的元素的時(shí)候,程序會(huì)因?yàn)檎也坏綄?duì)應(yīng)的方法而崩潰慷丽。
//如:-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x7fcd1bc30460
// copy后返回的是不可變對(duì)象(即 arr 是 NSArray 類型,NSArray 類型對(duì)象不能調(diào)用 NSMutableArray 類型對(duì)象的方法)
原因:是因?yàn)?copy 就是復(fù)制一個(gè)不可變 NSArray 的對(duì)象鳄哭,不能對(duì) NSArray 對(duì)象進(jìn)行添加/修改要糊。

4.@synthesize 和 @dynamic 分別有什么作用?

@property有兩個(gè)對(duì)應(yīng)的詞妆丘,一個(gè)是@synthesize(合成實(shí)例變量)锄俄,一個(gè)是@dynamic。
如果@synthesize和@dynamic都沒(méi)有寫勺拣,那么默認(rèn)的就是 @synthesize var = _var;
// 在類的實(shí)現(xiàn)代碼里通過(guò) @synthesize 語(yǔ)法可以來(lái)指定實(shí)例變量的名字奶赠。(@synthesize var = _newVar;)

@synthesize 的語(yǔ)義是如果你沒(méi)有手動(dòng)實(shí)現(xiàn)setter方法和getter方法,那么編譯器會(huì)自動(dòng)為你加上這兩個(gè)方法药有。
@dynamic 告訴編譯器毅戈,屬性的setter與getter方法由用戶自己實(shí)現(xiàn),不自動(dòng)生成(如塑猖,@dynamic var)竹祷。

5.Objective-C 如何對(duì)內(nèi)存管理的,說(shuō)說(shuō)你的看法和解決方法羊苟?

答:Objective-C的內(nèi)存管理主要有三種方式ARC(自動(dòng)內(nèi)存計(jì)數(shù))塑陵、手動(dòng)內(nèi)存計(jì)數(shù)、內(nèi)存池蜡励。
1). 自動(dòng)內(nèi)存計(jì)數(shù)ARC:由Xcode自動(dòng)在App編譯階段令花,在代碼中添加內(nèi)存管理代碼。
2). 手動(dòng)內(nèi)存計(jì)數(shù)MRC:遵循內(nèi)存誰(shuí)申請(qǐng)凉倚、誰(shuí)釋放兼都;誰(shuí)添加,誰(shuí)釋放的原則稽寒。
3). 內(nèi)存釋放池Release Pool:把需要釋放的內(nèi)存統(tǒng)一放在一個(gè)池子中扮碧,當(dāng)池子被抽干后(drain),池子中所有的內(nèi)存空間也被自動(dòng)釋放掉杏糙。內(nèi)存池的釋放操作分為自動(dòng)和手動(dòng)慎王。自動(dòng)釋放受runloop機(jī)制影響。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宏侍,一起剝皮案震驚了整個(gè)濱河市赖淤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谅河,老刑警劉巖咱旱,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件确丢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吐限,警方通過(guò)查閱死者的電腦和手機(jī)鲜侥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)毯盈,“玉大人剃毒,你說(shuō)我怎么就攤上這事÷Ц常” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵益缠,是天一觀的道長(zhǎng)脑奠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)幅慌,這世上最難降的妖魔是什么宋欺? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮胰伍,結(jié)果婚禮上齿诞,老公的妹妹穿的比我還像新娘。我一直安慰自己骂租,他們只是感情好祷杈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渗饮,像睡著了一般但汞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上互站,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天私蕾,我揣著相機(jī)與錄音,去河邊找鬼胡桃。 笑死踩叭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翠胰。 我是一名探鬼主播容贝,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亡容!你這毒婦竟也來(lái)了嗤疯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤闺兢,失蹤者是張志新(化名)和其女友劉穎茂缚,沒(méi)想到半個(gè)月后戏罢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脚囊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年龟糕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悔耘。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讲岁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衬以,到底是詐尸還是另有隱情缓艳,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布看峻,位于F島的核電站阶淘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏互妓。R本人自食惡果不足惜溪窒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冯勉。 院中可真熱鬧澈蚌,春花似錦、人聲如沸灼狰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伏嗜。三九已至坛悉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間承绸,已是汗流浹背裸影。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留军熏,地道東北人轩猩。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荡澎,于是被迫代替她去往敵國(guó)和親均践。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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

  • 設(shè)計(jì)模式是什么摩幔? 你知道哪些設(shè)計(jì)模式彤委,并簡(jiǎn)要敘述?設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)或衡,就是用比較成熟的邏輯去處理某一種類型的事...
    irenb閱讀 5,195評(píng)論 1 21
  • 設(shè)計(jì)模式是什么焦影? 你知道哪些設(shè)計(jì)模式车遂,并簡(jiǎn)要敘述? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)斯辰,就是用比較成熟的邏輯去處理某一種類型的...
    Jt_Self閱讀 738評(píng)論 0 4
  • 設(shè)計(jì)模式是什么舶担? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述彬呻? 設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)衣陶,就是用比較成熟的邏輯去處理某一種類型的...
    如果我們是朋友閱讀 670評(píng)論 0 9
  • 其實(shí)湖苞,一廂情愿的好拯欧,或許受傷的永遠(yuǎn)都是多情的那個(gè)! 婆婆與兒媳婦的關(guān)系無(wú)非就是有三種 一:婆婆對(duì)兒媳婦不好 二:兒...
    蠢萌貓咪閱讀 2,659評(píng)論 0 1
  • 概念:私人董事會(huì) 還記得第90課學(xué)習(xí)的“貝尼斯定理”嗎?我們70%的成長(zhǎng)羔杨,來(lái)自“工作中學(xué)習(xí)”捌臊,20%來(lái)自“向他人學(xué)...
    洋_蔥頭閱讀 405評(píng)論 0 0