1. 程式人生 > >iOS 一個類只允許外部呼叫特定初始化方法來初始化

iOS 一個類只允許外部呼叫特定初始化方法來初始化

問題:一個類只想讓外部呼叫特定初始化方法來初始化

例如只允許呼叫
- (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;

另外,介紹 指定初始化方法與便利初始化方法參考: