第一章 熟悉Objective-C
1.了解起源
oc 使用“消息結(jié)構(gòu)”侧甫,運行時執(zhí)行的代碼由運行環(huán)境決定蹋宦,而函數(shù)調(diào)用的語言,由編譯器決定妆档。
在oc,有部分變量不算oc對象,如CGRect.
2.在類的頭文件中盡量少引入其他頭文件
將引入頭文件的時間盡量延后,可以減少類的使用者所需引入的頭文件的數(shù)量敦捧。
一般的做法是:
#Person.h
@class A
#Person.m
#import A
但是如果你的類繼承自某個類,或者有代理方法习瑰,就必須放在.h
3.多使用字面量語法
這個語法方便好用秽荤,但是我還是有點不習(xí)慣。一般數(shù)組窃款,字典的我用它。
如 NsArray *animals = @[@"cat",@"dog"];常規(guī)寫法我就不寫了烟阐。
取數(shù)組下標(biāo): NSString *dog = animals[1];
NSDictionNary *dic = @{@"dog":@"first",@"cat":@"second"};
NSString *dog = dic[@"first"];
局限性:字面量的元素不能為nil,而且除了字符串以為必須為Foudation對象。并且都是不可變的 蜒茄,如需可變 后面需要加 mutableCopy.
4.多用類型常量,少用#define
預(yù)處理不含類型信息玩祟,在.m中加入static const,定義只在編譯單元可見。
5.用枚舉表示狀態(tài)空扎,選項
第二章:對象胜臊,消息,運行期
6.理解屬性
nonatmic象对,atomic,非原子性甫煞。表示線程不安全冠绢。atomic有鎖機制抚吠。但是耗費性能弟胀。所以,ios中還是用nonatmic
assign,weak 區(qū)別:assign修飾常量萧朝。weak 會 set nil.
strong,copy.一般字符串用copy.
其他的我就不說了夏哭。
7.對象內(nèi)部盡量直接訪問實例變量
10.關(guān)聯(lián)屬性
12.理解消息轉(zhuǎn)發(fā)機制
消息轉(zhuǎn)發(fā)分為2個階段:1.征詢接受者,所屬的類看其是否能夠動態(tài)添加方法竖配,以處理當(dāng)前這個@selector,這叫做動態(tài)方法解析,2.看看有沒有其他對象能處理這條消息用爪,若有龄减,則運行期系統(tǒng)會把消息轉(zhuǎn)給那個對象,于是消息轉(zhuǎn)發(fā)過程結(jié)束。否則署隘,啟動完整的轉(zhuǎn)發(fā)機制,運行期系統(tǒng)會把與消息有關(guān)的全部細節(jié)封裝到NSInvocation.再給接收者最后一次機會磁餐,令其設(shè)法解決當(dāng)前未處理的消息阿弃。
動態(tài)方法解析:
對象在收到無法解讀的消息后,會調(diào)用:
+(BooL)resloveInstanceMethod:(SEL)selector
備援接收者
-(id)forwardingTargetForSelctor:(SEL)selector
完整的消息轉(zhuǎn)發(fā)機制
創(chuàng)建NSInvocation對象渣淳,把未處理的消息有關(guān)的全部細節(jié)都封于其中,此對象包含選擇子鄙漏,目標(biāo)棺蛛,及參數(shù)。
實現(xiàn)此方法時旁赊,若發(fā)現(xiàn)某調(diào)用操作不應(yīng)由本類處理,則需調(diào)用超類的同名方法籍胯。直至NSObject.如果最后調(diào)用了NSObject方法离福,那么該犯法會繼續(xù)調(diào)用“doesNotRecongnizeSelector”.
-(void)forwardInvoation:(NSInvocation*)invocation