關(guān)于開發(fā)規(guī)范和優(yōu)化思想

關(guān)于封裝思路:

1.頁面過于冗余的時候可以采用分類形式,或者為了方便使用某些自定義的方法采用分類為系統(tǒng)控件添加方法。

比如路由編寫的時候,Nav為了方便使用,采用VC的分類形式。直接使用[vc gotoPage:pageName]

2.相關(guān)工具或者抽離出來的組件,可以作為對象考慮分離問題。比如寫路由的時候,路由的nav的參數(shù)拆分一個Model類,便于方法看起來簡潔。同理,路由的相關(guān)參數(shù)數(shù)據(jù)也可以封裝一個Data類。如果里面有很多的數(shù)據(jù)相關(guān)操作,不牽扯到視圖可以再封裝出一個manger或者Utility類。

3.工具類的方法暴露出來的盡量寫的全面,多樣化,盡可能重載清晰。

4.可以對APPdelegate進(jìn)行抽離分類,不同分類處理不同的業(yè)務(wù)。

5.對Nav? push的棧做最大限制,如果棧中vc數(shù)量過多,則自動剔除最開始的一個(root push的第一個vc)

6.在ViewController的分類中綁定某個vc和某個字典。 這一點(diǎn)我另一篇文章分類里面寫過,不過發(fā)現(xiàn)一個新的用途。頁面?zhèn)髦档牧硪环N方式

- (void)setCallBackCommandForPageNavigation:(NSString *)command {

objc_setAssociatedObject(self, ((__bridge void*)callBackCommandKeyForPageNavigation),command, OBJC_ASSOCIATION_RETAIN);

}

7.類中定義的協(xié)議,枚舉,宏。如果比較特殊或者比較多,都可以新建一個.h放置

8.可變集合,數(shù)組,字典等等 插入objc前要做非空判斷,容器類最好使用泛型,盡可能少用可變類型

9.通知要使用全局的字符串定義,采用組合形式。最好是加上didWill這一類的代表性關(guān)鍵字。參照系統(tǒng)的定義方式:

比如:NSTextView Did ChangeSelection Notification

10.在大量創(chuàng)建臨時變量的地方使用autoreleasepool,比如for,遍歷

11.在init和dealloc階段,self是一個不完整的對象。所以不允許在這兩個方法中使用self調(diào)用屬性,用_調(diào)用,但是外面正常方法中建議使用self,防止不調(diào)用get方法。

12.dealloc并不能準(zhǔn)確釋放計時器類Timer,因?yàn)槿绻衅渌胤綇?qiáng)引用類,或者timer強(qiáng)引用其他object根本不會走dealloc。所以有必要手動將其置為nil

13.NSCopying協(xié)議的對象必須用copy修飾,NSString,NSURL,block,NSArray推薦使用copy。UIView這一類用strong,strong引用子類,weak引用parent

14. 小助手option+command+/即可自動插入注釋? 完整格式的注釋

15. x=a?a:b 只要寫成x=a?:b

16. 長條件if判斷用bool在外部替代?

? ? ? 比如:if(a == (B +c/d) || [aa isEqualToString:@"name"]) 可以把里面的判斷條件摘出來做一個bool值

17.*之前出了一個問題,本地化的時候,由于沒有了網(wǎng)絡(luò)請求的限制,視圖創(chuàng)建的速度就跟不上進(jìn)程的速度了。導(dǎo)致有可能在調(diào)用self.view 的時候調(diào)用不到而報錯。所以在使用除了viewDidLoad之外的一些方法里調(diào)用self.view 的時候一定要注意,這個時候他是否已經(jīng)被創(chuàng)建出來了

18.在使用固定格式的dateFormatter時候,需要設(shè)置setLocale為"en_US_POSIX",防止一些不同日歷下格式異常,其實(shí)和“en_US”是一樣的,但是系統(tǒng)更推薦用上面那個。當(dāng)然,大部分人直接用的"zh_CN"

NSDate* now = [NSDate date];

NSDateFormatter* format = [[NSDateFormatter alloc] init];

format.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

19.不建議將UIView類的對象加入到NSDictionary, NSSet,如有需要可以添加到NSMapTable 和 NSHashTable。

NSDictionary,NSSet會對加入的對象做strong引用,而NSMapTable、NSHashTable會對加入的對象做weak引用。

20. 取substring的時候要考慮emoji字符的問題,防止截到中間crash

- (NSString *)yySubstringToIndex:(NSUInteger)index

{

//越界判斷

NSRange wRange = [self rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, index)];

return [self substringWithRange:wRange];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中。。。 其實(shí)如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,490評論 1 23
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,068評論 0 9
  • 昨天又沒寫日記,說起來也覺得好笑,明明我寫簡歷的進(jìn)度都停擺,西磨磨東磨磨,竟然我的時間居然都擠不出來寫一篇日記。鑒...
    街亭盧旺達(dá)閱讀 164評論 0 0

友情鏈接更多精彩內(nèi)容