色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS系統OC經典之作解讀

大?。?/span>0.2 MB 人氣: 2017-09-25 需要積分:1

最近在重溫這本OC經典之作《Effective Objective-C 2.0編寫高質量iOS與OS X代碼的52個有效方法》,這篇文章算是重溫之后的產物吧,讀完這篇文章你將快速讀完這本書,由于個人能力有限,難免有一些遺漏或者錯誤,請各位看官不吝賜教!謝謝!同時如果有任何問題也可以在下方留言,歡迎一起交流進步!另外由于篇幅原因,書中一些基礎知識的介紹文中就省略掉了。

目錄

上面就是這本書的目錄,可以點擊這里下載PDF版,原版英文版PDF我也有存~

第一章:熟悉Objective-C

第一條:了解Objective-C語言的起源

Objective-C從Smalltalk語言是從Smalltalk語言演化而來,

Smalltalk是消息語言的鼻祖。

Objective-C是C語言的超集,在C語言基礎上添加了面向對象等特性,可能一開始接觸時你會覺得語法有點奇怪,那是因為Objective-C使用了動態綁定的消息結構,而Java,C++等等語言使用的是函數調用。

消息結構與函數調用的關鍵區別在于:函數調用的語言,在編譯階段由編譯器生成一些虛方法表,在運行時從這個表找到所要執行的方法去執行。而使用了動態綁定的消息結構在運行時接到一條消息,接下來要執行什么代碼是運行期決定的,而不是編譯器。

第二條: 在類的文件中盡量少引用其他頭文件

如果需要引用一個類文件時,只是需要使用類名,不需要知道其中細節,可以用@class xx.h,這樣做的好處會減少一定的編譯時間。如果是用的#import全部導入的話,會出現a.h import了b.h,當c.h 又import a.h時,把b.h也都導入了,如果只是用到類名,真的比較浪費,也不夠優雅

有時候無法使用@class向前聲明,比如某個類要遵循一項協議,這個協議在另外一個類中聲明的,可以將協議這部分單獨放在一個頭文件,或者放在分類當中,以降低引用成本。

第三條:多用字面量語法,少用與之等價的方法

1.多使用字面量語法來創建字符串,數組,字典等。

傳統創建數組方法:

1

2

3

4  NSArray *languages = [NSArray arrayWithObjects:@ “PHP” , @ “Objective-C” , someObject, @ “Swift” , @ “Python” , nil];

NSString *Swift = [languages objectAtIndex:2];

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@ “key” , @ “value” , nil];

NSString *value = [languages objectForKey:@ “key” ];

字面量:

1

2

3

4  NSArray *languages = @[@ “PHP” , @ “Objective-C” , someObject, @ “Swift” , @ “Python” ];

NSString *Swift = languages[2];

NSDictionary *dict = @{@ “key” : @ “value” };

NSString *value = languages[@ “key” ];

這樣做的好處:使代碼更簡潔,易讀,也會避免nil問題。比如languages數據中 someObject 如果為nil時,字面量語法就會拋出異常,而使用傳統方法創建的languages數組值確是@[@“PHP”, @“Objective-C”];因為字面量語法其實是一種語法糖,效果是先創建了一個數組,然后再把括號中的對象都加到數組中來。

不過字面量語法有一個小缺點就是創建的數組,字符串等等對象都是不可變的,如果想要可變的對象需要自己多執行一步mutableCopy,例如

1  NSMutableArray *languages = [@[@ “PHP” , @ “Objective-C” , @ “Swift” , @ “Python” ] mutableCopy];

第四條:多用類型常量,少用#define預處理指令

第4條第5條看這里

第五條:多用枚舉表示狀態、選項、狀態碼

第4條第5條看這里

第二章:對象、消息、運行期

第六條:理解“屬性”這一概念

這一條講的是屬性的基本概念,以及屬性的各種修飾符,這些就不多啰嗦了,這里強調一下:

定義對外開放的屬性時候盡量做到暴露權限最小化,不希望被修改的屬性要加上readonly。

atomic 并不能保證多線程安全,例如一個線程連續多次讀取某個屬性的值,而同時還有別的線程在修改這個屬性值得時候,也還是一樣會讀到不同的值。atomic 的原理只是在 setter and getter 方法中加了一個@synchronized(self),所以iOS開發中屬性都要聲明為nonatomic,因為atomic嚴重影響了性能,但是在Mac OSX上開發卻通常不存在這個性能問題

說一下下面的哪個屬性聲明有問題

1

2

3

4  @property (nonatomic, strong) NSArray *arrayOfStrong;

@property (nonatomic, copy) NSArray *arrayOfCopy;

@property (nonatomic, strong) NSMutableArray *mutableArrayOfStrong;

@property (nonatomic, copy) NSMutableArray *mutableArrayOfCopy;

具體運行示例點擊查看

答案是正常應該這樣聲明

1

2  @property (nonatomic, copy) NSArray *arrayOfCopy;

@property (nonatomic, strong) NSMutableArray *mutableArrayOfStrong;

第七條:在對象內部盡量直接訪問實例變量

在類內讀取屬性的數據時,應該通過直接實例變量來讀,這樣不經過Objecit-C的方法派發,編譯器編譯后的代碼結果是直接訪問存實例變量的那塊內存中的值,而不會生成走方法派發的代碼,這樣的速度會更快。

給屬性寫入數據時,應該通過屬性的方式來寫入,這樣會調用setter 方法。但是在某種情況下初始化方法以及dealloc方法中,總是應該直接通過實例變量來讀寫數據,這樣做是為了避免子類復寫了setter方法造成的異常。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 秋霞电影网午夜鲁丝片 | 精品无码国产自产在线观看水浒传 | 草莓视频cm.888tw | 国产在线精品国自产拍影院午夜 | 精品成人片深夜 | 99精品小视频 | 国产中文字幕在线 | AV97最新无码喷水叫床 | max girls 大感谢祭 | 偷拍久久国产视频免费 | 伊在香蕉国产在线视频 | 精品丰满人妻无套内射 | 摥管专用动态图399期 | 99热久久这里只有精品 | 三级黄色一级视频 | 正在播放国产尾随丝袜美女 | 先锋影音av无码第1页 | 性插图动态图无遮挡 | 九九黄色大片 | 97夜夜澡人人爽人人模人人喊 | 99视频久九热精品 | 在线高清视频不卡无码 | 饥渴难耐的浪荡艳妇在线观看 | 一边摸一边桶一边脱免费 | 青草伊人久久 | 亚洲国产精品VA在线看黑人 | 无码中文字幕热热久久 | 成人毛片免费在线观看 | 国产成人亚洲精品老王 | 久久棋牌评测 | 欧美重口绿帽video | 中国欧美日韩一区二区三区 | 国产亚洲精品字幕在线观看 | 久久成人无码国产免费播放 | 国产精品在线手机视频 | 黄页网站18以下勿看免费 | 姑娘日本大全免费观看版中文翻译 | 麻豆国产96在线日韩麻豆 | 禁漫H天堂免费A漫 | WWW久久只有这里有精品 | 亚洲第一区欧美日韩精品 |