類的申明放在 .h 文件中,類的實現放在 .m 文件中
類分為可變類、不可變類
2.1. 必須在不可變對象創建時,設置不可變對象的內容。不可變對象在創建后,對象的值不能被其它對象改變
2.2. 可變對象的值,在對象創建之后,在運行時,可變對象的值可以被其它對象改變繼承是鏈式的,如果在類參考文檔中,在某個類及它的父類中找不到某個方法,請根據繼承鏈路逐一查找
類申明的關鍵字:interface
-
申明類的語法:
@interface SimpleClass : NSObject @end
屬性性質的申明在
property
關鍵字之后,在一對圓括號之間被指定,用于標識屬性是否只讀-
方法申明:
- (void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2;
在應用或項目中(包括第三方類庫),類名必須唯一
-
類方法申明:
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
對象發送消息
10.1 [someObject doSomething];id 關鍵字表示:某種對象類型
-
創建對象并初始化
12.1XYZPerson *object = [XYZPerson new];
12.2
XYZPerson *object = [[XYZPerson alloc] init];
-
字面值也可以創建對象
NSString *someString = @"Hello, World!"; NSNumber *myBOOL = @YES; NSNumber *myFloat = @3.14f; NSNumber *myInt = @42; NSNumber *myLong = @42L;
-
對象比較
14.1 比較兩個指針是否指向同一對象if (firstPerson == secondPerson) { // firstPerson is the same object as secondPerson }
14.2 判斷兩個對象是否表示同一個值
if ([firstPerson isEqual:secondPerson]) { // firstPerson is identical to secondPerson }
14.4 某些類(如:NSString,NSNumber,NSDate)可以使用方法比較大小
if ([someDate compare:anotherDate] == NSOrderedAscending) { // someDate is earlier than anotherDate }
nil 說明
15.1 初始化數量值時,如果不賦初值,請把它設置為 nil,否則,變量里會有前一個堆留下的垃圾值
15.2 對象指針不需要設置 nil,因為如果你不給它設置初始值,編譯器會幫你把它設置為 nil
15.3 給 nil 發送消息是安全的,如果你給 nil 發送消息,實際上,什么也不會發生
15.4 判斷對象是否為 nil 的兩種方式
if (object == nil)
if (!object)
訪問器(accssor)—— 編譯器自動生成
16.1 用于訪問值的方法(getter 方法)擁有與屬性一樣的名字
16.2 用于設置值的方法(setter 方法)用 set 開頭的單詞命名,并且,其中的屬性名首字母要大寫-
屬性特征詞
17.1 只讀@property (readonly) NSString *fullName;
17.2 設置訪問器格式
@property (getter=isFinished) BOOL finished;
-
用category(類目)對現有類添加方法
18.1 定義#import "XYZPerson.h" @interface XYZPerson (XYZPersonNameDisplayAdditions) - (NSString *)lastNameFirstNameString; @end
18.2 實現
#import "XYZPerson+XYZPersonNameDisplayAdditions.h" @implementation XYZPerson (XYZPersonNameDisplayAdditions) - (NSString *)lastNameFirstNameString { return [NSString stringWithFormat:@"%@, %@", self.lastName, self.firstName]; } @end
18.3 為了避免未定義的行為(類目里的方法名與被擴展類中的已有方法名重名),最佳的做法是給類目中的方法名稱前添加一個前綴
-
用extension來實現類的擴展
19.1 類擴展在編譯時,只能被添加到已有源代碼的一類中
19.2 類擴展的方法申明在原始類的 @implementation 塊中
19.3 語法@interface ClassName () @end
-
協議(protocol)定義消息傳遞合同
20.1 一個協議聲明的方法和屬性,獨立于任何特定的類
20.2 接口和數據源屬性通常標記為弱(week)
20.3 使用@optional
指令把協議的方法標識為可選。@optional 指令適用于遵循它的任何方法 ,直到協議定義的最后,或者遇到另一個指令之前,例如 @required@protocol XYZPieChartViewDataSource - (NSUInteger)numberOfSegments; - (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex; @optional - (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex; - (BOOL)shouldExplodeSegmentAtIndex:(NSUInteger)segmentIndex; @required - (UIColor *)colorForSegmentAtIndex:(NSUInteger)segmentIndex; @end
-
使用 NSNull 代替 nil
21.1 不能在集合中添加 nil,因為在 Object-C 中,nil 表示沒有對象,集合中需要使用 NSNullNSArray *array = @[ @"string", @42, [NSNull null] ];
Object-C 學習筆記
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 字符串處理認識->NSString是一個Unicode編碼、16位字符的字符序列。語法:NSString *som...
- 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
- 類和對象 類型系統 引用類型 reference type 類class 指針 pointer 塊 block 類...