Effective Objective-C讀后筆記(1)

1、Objective-C中的內(nèi)存分布

  • 對(duì)象類(lèi)型內(nèi)存分布在堆里面懦窘,是直接管理內(nèi)存前翎。
  • 指針類(lèi)型分布在棧里面系統(tǒng)幫我們管理內(nèi)存。
  • 不含*的變量畅涂,可能會(huì)使用椄刍空間。結(jié)構(gòu)體保存非對(duì)象類(lèi)型午衰。

2立宜、在類(lèi)的頭文件里面盡量少的引用其他頭文件

  • 盡量使用“向前申明(@class)”在頭文件引用該類(lèi),在.m文件才真正引用臊岸。
  • 盡可能的避免兩個(gè)類(lèi)相互引用橙数。
  • 如果一個(gè)協(xié)議多個(gè)地方使用的話盡可能的把協(xié)議單獨(dú)寫(xiě)成一個(gè)文件。

3帅戒、多用字面量灯帮,少用等價(jià)方法

  • 字面量能在使用的時(shí)候盡早發(fā)現(xiàn)問(wèn)題。例如
    NSString *a = @"a";
    NSString *b = nil;
    NSString *c = @"c";
    //崩潰
    NSArray *stringArray = @[a,b,c];
    //不會(huì)崩潰
    NSArray *stringArray1 = [NSArray arrayWithObjects:a,b,c,nil];
  • 字面量能方便的實(shí)現(xiàn)數(shù)據(jù)的初始化逻住。例如
    NSNumber *num1 = @1;
    NSNumber *num2 = @2.1;
    NSNumber *num3 = @YES;
  • 字面量創(chuàng)建出來(lái)的對(duì)象都是不可變的如果需要可變的話必須復(fù)制一份mutableCopy钟哥,當(dāng)然這樣就又會(huì)創(chuàng)建一個(gè)新的新的對(duì)象。

4瞎访、多用類(lèi)型常量腻贰,少用#define預(yù)處理指令

  • 常量命名如果只是該文件內(nèi)部使用一般使用k開(kāi)頭,如果外部需要使用一般以該類(lèi)名開(kāi)頭扒秸。
  • 申明常量的時(shí)候一般是staticconst一起使用播演。const保證常量不能被修改,否則編譯器會(huì)報(bào)錯(cuò)伴奥。static修飾意味著該常量只能在該編譯單元可見(jiàn)写烤。如果不加static編譯的時(shí)候就會(huì)生成一個(gè)“外部符號(hào)”,當(dāng)在其他地方申明同一個(gè)常量名的時(shí)候就會(huì)報(bào)錯(cuò)拾徙。
  • 在頭文件使用extern來(lái)申明全局常量洲炊。例如
.m
NSString *const ViewControllerName = @"ViewControllerName";
.h
extern NSString *const ViewControllerName;

5、多用枚舉表示狀態(tài)锣吼、選項(xiàng)

  • 盡可能多的使用NS_ENUM和NS_OPTIONS來(lái)定義枚舉选浑,以保證更好的向后兼容。
  • 多選枚舉玄叠。
typedef NS_OPTIONS(NSInteger, MyOptions){
    NOT = 0,
    A = 1 << 0,
    B = 1 << 1,
    C = 1 << 2,
    D = 1 << 3
};
//使用
    MyOptions test = A | B | C;
    if (test & A) {
        NSLog(@"A");
    }
    if (test & B) {
        NSLog(@"B");
    }
    if (test & C) {
        NSLog(@"C");
    }

6古徒、"屬性"

  • 使用@property來(lái)定義對(duì)象中所封裝的數(shù)據(jù)。
  • 使用@dynamic來(lái)阻止對(duì)象生成set和get方法读恃。
  • assign修飾純值隧膘;strong修飾對(duì)象代态,先保留新值,釋放舊值疹吃,把新值賦值上去蹦疑;weak不保留新值,不保留舊值萨驶,當(dāng)對(duì)象釋放的時(shí)候自動(dòng)置為nil歉摧;copy不保留新值,而是copy一份新值腔呜。

7叁温、對(duì)象內(nèi)部盡量直接訪問(wèn)實(shí)例變量

  • 對(duì)象內(nèi)部設(shè)置屬性時(shí)盡量使用set方法,讀取直接實(shí)例變量核畴。
  • init和dealloc方法中盡量使用直接訪問(wèn)的形式進(jìn)行賦值膝但。
  • 懶加載必須走get方法才能初始化。

8谤草、對(duì)象的對(duì)等性

  • ==比較的是兩個(gè)對(duì)象的指針跟束。
  • 兩個(gè)對(duì)象進(jìn)行對(duì)比一般使用對(duì)象提供的isEqual,如isEqualToString
  • 兩個(gè)對(duì)象的hash如果相等丑孩,但是兩個(gè)對(duì)象有可能還是不相等冀宴。
  • 重寫(xiě)hash方式的時(shí)候注意效率問(wèn)題。

9嚎杨、“類(lèi)族模式”隱藏實(shí)現(xiàn)細(xì)節(jié)

  • 提供一套簡(jiǎn)單的公共接口給用戶(hù)使用花鹅,隱藏實(shí)現(xiàn)的細(xì)節(jié)氧腰,在公共接口標(biāo)明子類(lèi)需要復(fù)習(xí)的方法枫浙。
  • 在UIKit框架中UIButton使用了該方式。

10古拴、在已有內(nèi)通過(guò)關(guān)聯(lián)對(duì)象存儲(chǔ)自定義數(shù)據(jù)

  • runtime對(duì)象關(guān)聯(lián)自定義數(shù)據(jù)
    //設(shè)置對(duì)象關(guān)聯(lián)自定義數(shù)據(jù)
    //關(guān)聯(lián)對(duì)象箩帚,key,需要關(guān)聯(lián)的值黄痪,內(nèi)存管理修飾
    objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)
    //獲取關(guān)聯(lián)對(duì)象key存儲(chǔ)的值
    //關(guān)聯(lián)對(duì)象紧帕,key
    objc_getAssociatedObject(<#id object#>, <#const void *key#>)
    //移除對(duì)象所有關(guān)聯(lián)的數(shù)據(jù)
    //關(guān)聯(lián)對(duì)象
    objc_removeAssociatedObjects(<#id object#>)
  • 關(guān)聯(lián)對(duì)象內(nèi)存修飾
    //assign
    OBJC_ASSOCIATION_ASSIGN
    //nonatomic,retain
    OBJC_ASSOCIATION_RETAIN_NONATOMIC
    //nonatomic,copy
    OBJC_ASSOCIATION_COPY_NONATOMIC
    //retain
    OBJC_ASSOCIATION_RETAIN
    //copy
    OBJC_ASSOCIATION_COPY
  • 通過(guò)runtime的這種對(duì)象關(guān)聯(lián)自定義屬性也能實(shí)現(xiàn)給category添加屬性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桅打,一起剝皮案震驚了整個(gè)濱河市是嗜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺尾,老刑警劉巖鹅搪,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異遭铺,居然都是意外死亡丽柿,警方通過(guò)查閱死者的電腦和手機(jī)恢准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)甫题,“玉大人馁筐,你說(shuō)我怎么就攤上這事∽狗牵” “怎么了敏沉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)炎码。 經(jīng)常有香客問(wèn)我赦抖,道長(zhǎng),這世上最難降的妖魔是什么辅肾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任队萤,我火速辦了婚禮,結(jié)果婚禮上矫钓,老公的妹妹穿的比我還像新娘要尔。我一直安慰自己,他們只是感情好新娜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布赵辕。 她就那樣靜靜地躺著,像睡著了一般概龄。 火紅的嫁衣襯著肌膚如雪还惠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天私杜,我揣著相機(jī)與錄音蚕键,去河邊找鬼。 笑死衰粹,一個(gè)胖子當(dāng)著我的面吹牛锣光,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铝耻,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼誊爹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瓢捉?” 一聲冷哼從身側(cè)響起频丘,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泡态,沒(méi)想到半個(gè)月后搂漠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽赁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年状答,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冷守。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惊科,死狀恐怖拍摇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馆截,我是刑警寧澤充活,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站蜡娶,受9級(jí)特大地震影響混卵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窖张,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一幕随、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宿接,春花似錦赘淮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至副女,卻和暖如春蛤高,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碑幅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工戴陡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枕赵。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓猜欺,卻偏偏與公主長(zhǎng)得像位隶,于是被迫代替她去往敵國(guó)和親拷窜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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