IOS開發複習筆記(1)-OC基礎知識

來源:互聯網
上載者:User

IOS開發複習筆記(1)-OC基礎知識
在上班之餘學習IOS已經有三個多月了,因為基礎有些薄弱從OC的基本文法開始學習的,相繼看了青柚子和紅柚子的書,現在在看編程實戰,趁這個機會好好的總結一下: 1.命名規範 物件類型和名稱一致,以免混淆 -(void) setURL:(NSString *)URL;//錯誤的命名方法 //更改為-(void)setURLString:(NSString *)string;-(void)setURL:(NSURL *)URL;靜態變數(包括範圍)以s開頭,而全集變數採用g開頭,在通常情況下應避免使用常量之外的全域變數: static MYThing *sSharedInstance常量在Cocoa和Core Foundation中以k開頭,在Cocoa中則不是,建議檔案範圍內的(靜態)常量都以k開頭: static const NSUInteger kMaximumNumberOfRows=3;NSString *const MYSomethingHappenedNotification=@"SomethingHappeded";方法參數名稱通常要加一個冠詞(a,an,the)(樓主註:貌似不是很常見啊),用這種方式對參數進行命名可以避免與方法中的局部變數和執行個體名稱混淆 執行個體變數以底線開頭 類名以大寫字母開頭,方法名和變數名則應該以小寫字母開頭,所有類名,方法名都採用駝峰式大小寫(即每個單詞的首字母大小寫)進行分隔,而不採用底線 2.自動引用計數 ARC不是記憶體回收,它只是一種編譯器最佳化,因此它不能處理循環參考的問題: 繪圖1   記憶體回收機制如果外部對象到對象A的引用連結中斷,則對象A和對象B都會被銷毀,但那時ARC中因為A,B的相互引用,其引用計數都大於1,因此在IOS開發中必須做好對強引用的管理 屬性的關係有兩種主要類型:strong和weak,相當於非ARC環境中的retain和assign,只要存在一個強引用對象就會一直存在,不會被銷毀。而weak在引用的對象被銷毀後,weak的引用會被自動置為nil,所以delegate的屬性總是應該聲明為weak。 3.屬性 在標頭檔聲明公有屬性,.m檔案中聲明私人屬性: 複製代碼//MyClass.h@interface class: NSObject@property (nonatomic,readwrite,weak) id delegate;@property (noatomic,readonly,strong) NSString *readonlyString;@end//MyClass.m@interface MyClass() @property (noatomic,readwrite,strong) NSString *readonlyString;@property (noatomic,strong) NSString *privateString;@end複製代碼  編譯器會自動建立_delegate,_readonlyString,_privateString幾個變數,不過只能再init,dealloc中調用這些執行個體變數 另外可以看到在.m檔案中重新聲明了一下readonlyString變數,為它增加了一個setter的私人方法 屬性的修飾關鍵字: 1)原子性(atomic,nonatomic) 本意是指屬性的存取器方法是安全執行緒的,並不保證整個對象是安全執行緒的。比如使用NSMutableArray聲明一個stuff,使用 self.stuff和self.stuff=otherstuff(只涉及到存取),而採用objectAtIndex的方法訪問數組的時候並不是安全執行緒的。 但是如果屬性並不需要其他線程訪問的時候,使用原子屬性是一種極大的浪費,因此通常情況下採用的是nonatomic 2)讀寫屬性(readwrite和readonly) 3)設定方法修飾的關鍵詞(weak,strong,copy) 注意的是對於不可變類如NSString和NSArray使用copy修飾 屬性是用來表示對象的狀態的,getter方法必須沒有任何外部副作用,執行速度要快,不應該有阻塞。   屬性和私人執行個體變數,在@implementation中可以使用私人執行個體變數 如@implementation{ NSString *_name; } 預設的儲存類型是strong 4.儲存空間 使用的一些範圍,或者說必須使用存取器而最好別用執行個體變數: KVO(索引值觀察Key-Value Observing) 屬性可被自動觀察,那次修改一個屬性的時候可以調用willChangeValueForKey:和didChangeValueForKey:方法。 副作用(樓主太菜不是很懂副作用) 類或者子類可能會在設定的方法中引用副作用。可能會有一些註冊到NSUndoManager的通知或者事件,除非真的必要,否則這些事件都不應該被忽略。類似的,類或者子類可能會在擷取方法中使用緩衝,而直接存取執行個體變數則不會用到緩衝。 鎖 在多線程代碼中直接使用執行個體變數會突破鎖機制,不用多說後果了吧 不應該用儲存空間的地方: 儲存空間內部 dealloc方法 初始化方法:這裡可以用_Value,而不應該用屬性   5.分類和擴充 category個人認為是比較好用的。可以減少繼承,向現有的類添加新的方法,類似C#中的擴充方法 分類用於以模組化的方式將一個大型類分解成多個易於維護的類。 分類的聲明非常簡單,跟介面有些相像,在類名後的小括弧裡寫上分類名稱即可: @interface NSMutableString (Capitalize)) -(void) Capitalize @end

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.