iOS 一個類只允許外部呼叫特定初始化方法來初始化
阿新 • • 發佈:2018-12-18
問題:一個類只想讓外部呼叫特定初始化方法來初始化
例如只允許呼叫
- (instancetype)initWithName:(NSString *)name;
NS_UNAVAILABLE :標記方法不可用。Xcode不會自動補全,並且程式碼中如果呼叫此方法,會編譯報錯。但是runtime依然可以呼叫到此方法。
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
其中 - (instancetype)init NS_UNAVAILABLE;
等同於
- (instancetype)init __attribute__((unavailable)); - (instancetype)init __attribute__((unavailable("請使用initWithName:")));
NS_DESIGNATED_INITIALIZER: designed initializer (指定初始化方法)
- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
所以,類的初始化方法如下:
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
另外,介紹 指定初始化方法與便利初始化方法參考: