這個小系列是從 "Zen and the Art of the Objective-C Craftsmanship"中 進行的摘抄瓮钥,共分成6篇维贺,大部分是講代碼風格及美化,偶爾看看也不錯膘格。
- 原文GitHub地址:
https://github.com/objc-zen/objc-zen-book - 中文版GitHub地址:
https://github.com/oa414/objc-zen-book-cn
Category
-
category 方法前加上自己的小寫前綴以及下劃線谷婆。(真的很丑,但是蘋果也推薦這樣做)
- (id)zoc_myCategoryMethod
這是非常必要的径玖。因為如果在擴展的 category 或者其他 category 里面已經(jīng)使用了同樣的方法名痴脾,會導致不可預計的后果。(會調用最后一個加載的方法)
// 推薦 @interface NSDate (ZOCTimeExtensions) - (NSString *)zoc_timeAgoShort; @end // 不推薦 @interface NSDate (ZOCTimeExtensions) - (NSString *)timeAgoShort; @end
-
推薦使用Category來根據(jù)不同功能對方法進行分組梳星。
@interface NSDate : NSObject <NSCopying, NSSecureCoding> @property (readonly) NSTimeInterval timeIntervalSinceReferenceDate; @end @interface NSDate (NSDateCreation) + (instancetype)date; + (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs; + (instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti; + (instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)secs; + (instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date; // ... @end
NSNotification
當你定義你自己的 NSNotification 的時候你應該把你的通知的名字定義為一個字符串常量赞赖,就像你暴露給其他類的其他字符串常量一樣。你應該在公開的接口文件中將其聲明為 extern 的冤灾, 并且在對應的實現(xiàn)文件里面定義前域。
因為你在頭文件中暴露了符號,所以你應該按照統(tǒng)一的命名空間前綴法則韵吨,用類名前綴作為這個通知名字的前綴匿垄。(通常在頭文件中對外提供的常量都需要加上前綴,聲明extern + const归粉,并且并不是在頭文件中定義椿疗,而是在實現(xiàn)文件中定義。如果不是對外公開的常量糠悼,那么通常直接在實現(xiàn)文件里聲明為static + const届榄,并且也要加上前綴,直接在后面進行定義倔喂。)
同時铝条,用一個 Did/Will 這樣的動詞以及用 "Notifications" 后綴來命名這個通知也是一個好的實踐。
// Foo.h
extern NSString * const ZOCFooDidBecomeBarNotification
// Foo.m
NSString * const ZOCFooDidBecomeBarNotification = @"ZOCFooDidBecomeBarNotification";
所有文章
【objc-zen-book】1.條件語句&Case語句的注意
【objc-zen-book】2.命名
【objc-zen-book】3.類
【objc-zen-book】4.Category & NSNotification
【objc-zen-book】5.美化代碼 & 代碼組織
【objc-zen-book】6.Block & self的循環(huán)引用