Objective-c知識小結

1.建立一個類產生.h和.m兩個文件,.h中對用到的變量、方法做聲明,.m文件中實現,導入時只導入.h文件,若是直接把方法寫在.m文件中,未在.h文件中進行聲明,則是私有方法 
2.@interface 類名 :NSObject  @end,表明聲明一個類,冒號表示繼承,不可省,要使用OC中經常使用的類,那麼#import <Foundation/foundation.h>,Foundation框架內有個foundation.h文件,其中包括NSObject。 
3.- (int) getAge;聲明函數,-表明動態方法,即有對象才調用的方法,聲明靜態方法前用+ 方法後有幾個冒號就有幾個參數,類型用括號括住 4.實現方法時方法名後不帶括號 
5.建立類的對象,先調用靜態方法alloc分配內存:[類名 alloc],Student *stu=[Student alloc],OC對象必定是指針 
6.開發中這樣建立對象,Student *stu=[[Student alloc] init];構造方法init用於初始化,可本身編寫 7.調用對象方法,[對象名 方法] 8.本身寫一個構造方法(動態的),方法名以init開頭,自定義構造方法首先要調用父類構造方法(緣由很簡單),[super init] 
9.%@佔位符表明打印一個對象,打印對象會調用description方法 
10.全部的OC對象都要用指針來指向它,定義一個字符串,NSString *str=@」itcast」; 11.成員變量前要加下劃線,_age,_number,默認的規則 12.點語法的本質是調用set方法和get方法 
12.當編譯器遇到@property時,會自動展開get方法和set方法的聲明 13.@synthesize age,height,number,實現三個變量的方法 14.給對象發送某條消息至關於調用該對象的該方法 15.類名和*是離不開的,除非繼承聲明時 16.若是本身手動實現了getter和setter,xcode就不會自動生成@synthesize,也就不會自動生出下劃線的變量 
17.類內部定義的變量默認做用域是protect的,只能在類內部和子類中訪問,提供get方法和set方法供外部訪問 
18.動態方法內部的self是指調用當前對象,靜態方法內的self是指類名 19.在.h文件中聲明的方法是公共方法,不聲明而直接寫在.m文件中的方法是私有方法,只有.m文件中能使用該方法 
20.stu.age=100本質是調用了set方法,int age= stu.age本質調用了get方法 
21.Student *stu=[Student new]至關於Student *stu=[[Student alloc] init],但前者不能調用本身寫的構造方法 
22.在.m文件中用了@synthesize,那麼在.h文件中的成員變量定義可省略,由於該變量會在.m文件中自動生成,可是是私有的 
23.@synthesize age;默認訪問與age同名的變量,若是找不到則自動生成 
24.@synthesize age = _age,表明getter和setter會去訪問_age,若是沒有_age也會自動生成。那爲啥不直接@synthesize _age啊我去 
25.Xcode4.5以後的版本,若是在.h文件中使用@property age,則會在.m文件中自動生成@synthesize,即自動生成getter和setter,默認訪問的是_age變量(也是自動生成) 
26.Xcode關閉arc:在開發中的項目在項目設置的build setting中搜索garbage關鍵字就能夠看到這個選項了,而後選擇NO再次運行各類release就不會報警了 
27.驗證dealloc方法是否被使用時須要重寫父類的dealloc方法,[super dealloc]; 28.OC註釋:pragma mark,好處是能夠快速定位註釋位置 
29.指向已經釋放的內存的指針叫野指針,沒有指向任何的東西指針叫空指針,OC中野指針會報錯,空指針不會報錯 
30.set方法的內存管理:只針對參數是對象的set方法,參數是變量的不涉及內存管理
 
31.Student的set方法的參數是類Book的對象時,類Book產生了book對象後要本身釋放掉,Student產生的對象stu第一次使用該book對象時要在set方法中對book作retain操做:_book =[book retain],在dealloc方法中對book做release操做:[_book release],第二次使用book2對象要先在set方法中做release,賦值後再作retain,則可屢次使用,該操做要先判斷當前對象與參數是否相同,通常這樣寫: 
if(_book!=book){ [_book release];  _book=[book retain];} 這樣寫的緣由再次看視頻,語言很差表達 32.retainCount方法獲取 對象當前計數器的值 
33.在.h文件中聲明對象時用到某個類,用@class關鍵字聲明,在.m文件中實現時再用import導入,這樣可提升編譯性能 
34.兩個類互相擁有對方時,只能用@class而不能用import,原理是C語言兩個文件中不能互相擁有 
35.property參數,retain,做用是實現方法時會release舊值,再retain新值 
36.property參數,默認是readwrite,表明既生出get方法又set方法,寫readonly時只生出get方法 
37.property參數,默認是atomic,提供方法多線程調用,給get方法和set方法加鎖,保證線程安全,nonatomic表明方法不須要考慮線程安全(禁止多線程調用,可提升性能) 
38.語法:property(nonatomic,retain)Book *book;表明book的兩個方法不加鎖,且須要管理內存 
39.getter和setter也可做爲property參數,getter = what ,表明getter的方法名是what 40.[stu autorelease]不會改變對象的計數器值,只是將stu添加到自動釋放池中 41.自動釋放池被銷燬時,裏面的全部對象都會調用release方法計數器減一 42.經常使用寫法Student *stu = [[[Student alloc] init] autorelease]; 43.寫一個靜態方法快速建立對象,方法名最好與類名相同 
44.系統自帶的類如NSString,都是已經autorelease的,不須要再進行autorelease操做 
45.靜態方法建立的對象都是自動釋放的,本身建立的靜態方法(如快速建立對象)須要在方法實現中調用autorelease方法 
46.靜態方法不能訪問對象的成員變量 
47.垃圾回收機制:徹底不用管理內存                                                              ARC:編譯器自動生成管理內存的代碼 
48.不要把大量循環的代碼放在同一個自動釋放池中,浪費內存 49.儘可能不要把佔用內存大的對象放入自動釋放池 
50.Category,能夠在不改變已經存在的一個類的前提下爲該類添加一個新的方法,至關於該類的拓展 
51.類名後面有冒號表明繼承,類名後面有括號表明分類,括號裏是分類名稱 52.分類只能擴展方法,不能增長成員變量 
53.Protocol至關於JAVA中的接口,但其中聲明的方法能夠不所有實現 54.類名(或協議)後面有<>表明實現某個協議,通常是NSObject 55.只有實現了某個協議的對象才能充當按鈕的監聽器 
56.Block:將一段代碼封裝到block中,可在任什麼時候候調用這段代碼 
相關文章
相關標籤/搜索