2. 如果我們在NSString對象上調用NSString類型對象不支持的方法,編譯器就會發出警告。
3. 在Objective-C中,所有的對象變量都是指針類型。id類型已經被預定義爲指針類型,所以不需要加一個星號。
4. 在任何情況下,在方括號中代碼都意味着你是在給一個對象或者一個類型發送一個消息(即一個方法調用)。
5. 點語法只能使用在設置器(setter)和獲取器(getter)上,而不能用於普通方法。
6. alloc方法調用,作用是分配內存及實例化一個對象。調用新創建對象的init方法,通常做對象的初始化設置工作,比如創建實例變量。
7. 如果你通過手工alloc的方式創建一個對象,之後你需要release這個對象。同樣,你也不能手工釋放(release)一個能自動釋放(autoreleased)的對象,因爲這將會使你的應用程序崩潰。
8. 類的接口(interface)通常存放在類似ClassName.h的文件中,定義實例變量(protected)和公用(public)方法。
類的實現存放在ClassName.m這樣的文件中,它包含了這些方法的實際實現代碼。它通常還定義了客戶類不能訪問的私有(private)實體變量、方法。
9. #import指令會自動防止將同一個文件導入多次。
10. Objective-C語言中通常省略方法的“get”前綴。方法名字前面的單個減號(-)表明該方法是一個實例方法。如果方法名字前面是一個加號(+),則表明該方法是一個類(static)方法。
11. 每一個設置器都要處理兩個變量,第一個是當前引用的對象,第二個是新輸入的對象。在帶有垃圾回收機制的環境中,我們可以直接設置成新的值。 但是,如果你不能使用垃圾回收,你需要release舊的對象,並且retain新的對象。
12. 釋放一個對象的引用實際上有兩種方法:release 和 autorelease。標準的release會立刻釋放對象的引用。autorelease會等一會兒才釋放,但是引用實際上會一直存在,直到當前方法結束(除非你添加自定義的代碼來明確的改變它)。
13. 在設置器裏面使用autorelease方法會更加安全一些,因爲要改變的變量的新舊兩個值可能指向的是同一個對象。而你可能不希望立刻釋放實際上你要保留的對象。
14. dealloc方法在一個對象從內存中刪除時被調用。通常在這個方法裏面釋放所有對象裏的實例變量。
15. Objective-C的內存管理是基於引用計數的。
16. 分配的(alloc)對象,或者是保留(retain)在一些地方的對象,都需要給他們發送一個release消息。
17. 如果你通過alloc或者copy創建了一個對象,在函數結尾的地方給它發送一個release或者autorelease消息就行了。如果你是通過其它方式創建的對象,就什麼也別做。
18. NSLog()函數很像printf()函數,但不同的是要用一個%@符號代表一個對象。NSLog ( @"The current date and time is: %@", [NSDate date] );
19. 只有當訪問器不存在的時候,@synthesize纔會自動生成訪問器,所以,即使是使用@synthesize聲明瞭一個屬性,你仍然可以實現自定義的getter和setter。編譯器只會自動生成你沒有自定義的方法。
20. 在Objective-C中,nil對象的作用等同於很多其他語言的NULL指針。不同的地方在於,在nil上調用方法不會導致程序崩潰或拋出異常。我們不用在調用一個對象的方法之前檢查該對象是否爲空。如果你調用了一個nil對象的方法並且該方法有返回值的話,你會得到一個nil返回值。
21. 與子類不同,你不能通過類目來添加實例變量。但是你能通過類目重寫(override)類中已經存在的方法。
22. 在使用引號標記的 C 字符串前面加上 @ 符號,就構成了 static 的 Objective-C 字符串。
23. 屬性的參數值可以是:
readwrite(默認)或者 readonly:設置屬性是可讀寫的(擁有 getter/setter)或是隻讀的(只有 getter);
assign(默認),retain 或 copy:設置屬性的存儲方式;
nonatomic:不生成線程安全的代碼,默認是生成的(沒有 atomic 關鍵字);
getter=…,setter=…:改變訪問器默認的名字