類聲明與實現
// .h
@interface FirstClass : NSObject
@end
// .m
@implementation FirstClass
@end
方法聲明
+ (void)print; // 類方法
- (id)init; // 實例方法
+ (void)initWithName:(NSString *)name andAge:(NSInteger)age; // 多參數:選擇器為 initWithName:andAge:
+ 類方法,- 實例方法。
- 參數冒號後跟類型與變量名,選擇器包含所有關鍵字及冒號。
調用語法
[FirstClass print]; // 類方法
FirstClass *obj = [[FirstClass alloc] init]; // 實例化
[obj initWithName:@"codebat" andAge:21]; // 實例方法調用
成員變量與屬性
@interface FirstClass : NSObject {
@protected int m; double n; // 預設 protected
@private char c;
@public float f;
}
@property (nonatomic, strong) NSString *name; // 非基本類型用 strong
@property (nonatomic, assign) NSInteger age; // 基本類型用 assign
@end
@implementation FirstClass
@synthesize name = _name; // 手動指定實例變量名
@synthesize age;
@end
屬性屬性關鍵字
| 分類 | 關鍵字 | 說明 |
| 讀寫 | readwrite / readonly | 生成 setter/getter 或僅 getter |
| | |
| 內存管理 | assign | 基本類型、弱引用 |
| retain / strong | 持有對象(ARC 下用 strong) |
| copy | 複製對象(NSString、Block 常用) |
| weak / unsafe_unretained | 不持有,對象釋放自動置 nil (weak) |
| 線程安全 | atomic / nonatomic | atomic 為預設,加鎖;nonatomic 性能更高 |
訪問控制符
@protected:類及子類可見(預設)。
@private:僅本類可見。
@public:所有處可見(罕用)。