詳解Objective-C學(xué)習(xí)筆記使用教程
Objective-C的學(xué)習(xí)筆記是本文要介紹的內(nèi)容,主要來學(xué)習(xí)Objective-C的屬性特點(diǎn)、NSAutoreleasePool的了解、Emacs的移動快捷鍵+Xcode常用鍵的內(nèi)容,來看詳細(xì)內(nèi)容講解。
1、Objective-C 屬性特性(assign , retain , copy , readonly , readwrite)
assign:指定setter方法用簡單的賦值,這是默認(rèn)操作。你可以對標(biāo)量類型(如int)使用這個(gè)屬性。你可以想象一個(gè)float,它不是一個(gè)對象,所以它不能retain、copy。
retain:指定retain應(yīng)該在后面的對象上調(diào)用,前一個(gè)值發(fā)送一條release消息。你可以想象一個(gè)NSString實(shí)例,它是一個(gè)對象,而且你可能想要retain它。
copy:指定應(yīng)該使用對象的副本(深度復(fù)制),前一個(gè)值發(fā)送一條release消息?;旧舷駌etain,但是沒有增加引用計(jì)數(shù),是分配一塊新的內(nèi)存來放置它。
readonly:將只生成getter方法而不生成setter方法(getter方法沒有g(shù)et前綴)。
readwrite:默認(rèn)屬性,將生成不帶額外參數(shù)的getter和setter方法(setter方法只有一個(gè)參數(shù))。
2、了解NSAutoreleasePool
NSAutoreleasePool是一個(gè)存放對象的集合,添加到NSAutoreleasePool的對象能夠被自動釋放。
自動釋放其實(shí)就是在NSAutoreleasePool被清空或是銷毀時(shí)向池里所有的對象發(fā)送一條release消息。
對象不會自動入池,只有當(dāng)對象發(fā)送一條autorelease消息時(shí)才會被添加到當(dāng)前的池中??梢韵胂蟪卦谝粋€(gè)棧中,當(dāng)前池在棧頂,每創(chuàng)建一個(gè)新的池,就壓入,使用drain或者release時(shí),就彈出。
當(dāng)有對象是Autorelease的對象,而當(dāng)前沒有NSAutoreleasePool的話,就會提示內(nèi)存泄漏(Just Leaking)。一般來說,只要不是用new、alloc、copy方法創(chuàng)建一個(gè)對象的話,我們就假設(shè)該對象的引用計(jì)數(shù)為1,而且被添加到NSAutoreleasePool中。
如下面代碼就會提示內(nèi)存泄漏:
- NSDate *date = [NSDate date];
- NSLog(@"%@",[date description]);
- return 0;
- /*
- objc[3466]: Object 0x1001149c0 of class __NSDate autoreleased
- with no pool in place
- - just leaking - break on objc_autoreleaseNoPool() to debug
- */
- NSDate *date = [NSDate date];
- NSLog(@"%@",[date description]);
- return 0;
- /*
- objc[3466]: Object 0x1001149c0 of class __NSDate autoreleased
- with no pool in place
- - just leaking - break on objc_autoreleaseNoPool() to debug
- */
關(guān)于drain和release的問題可以在此處找到說明。在非GC環(huán)境下,兩者的作用是相同的。否則你沒有理由去使用release,給NSAutoreleasePool發(fā)送drain會提醒GC處理池中的對象。
3、Emacs的移動快捷鍵+Xcode快捷鍵
雖然不想在學(xué)Emacs的使用,但為了在Mac下使用的更順暢,還是記錄下來,因?yàn)檫@些xcode快捷鍵鍵可以在Xcode、TextEdit、Safari的URL地址欄等處使用。
- control-F 向右邊(Forward)移動
- control-B 向左邊(Backward)移動
- control-N 向下(Next)移動一行
- control-P 向上(Previous)移動一行
- control-K 刪除(Kill)光標(biāo)后的代碼
- control-A 移動到行首(同command+左箭頭)
- control-E 移動到行尾(同command+右箭頭)
- control-T 轉(zhuǎn)置(Transpose,交換)光標(biāo)兩邊的符號
- control-D 刪除(Delete)光標(biāo)右邊的字符
- control-L 將插入點(diǎn)置于窗口正中(不解)
Xcode快捷鍵:
- command+[ 左移代碼塊
- command+] 右移代碼塊
- Tab 接受代碼提示
- Ese 顯示代碼提示
- Control+. 循環(huán)瀏覽代碼提示
- Shift+Control+. 反向?yàn)g覽代碼提示
- Control+/ 移動到代碼提示的下一個(gè)點(diǎn)位符
- Command+Control+S 創(chuàng)建快照
小結(jié):關(guān)于Objective-C的屬性特點(diǎn)、NSAutoreleasePool的了解、Emacs的移動快捷鍵+Xcode常用鍵的內(nèi)容的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!