加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 重新定义父类声明为NS_UNAVAILABLE的初始化程序

发布时间:2020-12-16 06:49:55 所属栏目:百科 来源:网络整理
导读:我可以批准在初始化程序中找到 Objective-c的继承有多糟糕,但我不会.在这种情况下,我只想重新定义一个以前由父类声明为NS_UNAVAILABLE的初始化器.如: @interface Parent : NSObject// Unavailable- (instancetype)init NS_UNAVAILABLE;// Some other (appro
我可以批准在初始化程序中找到 Objective-c的继承有多糟糕,但我不会.在这种情况下,我只想重新定义一个以前由父类声明为NS_UNAVAILABLE的初始化器.如:

@interface Parent : NSObject

// Unavailable
- (instancetype)init NS_UNAVAILABLE;

// Some other (appropriate) initialiser
- (instancetype)initWithWhatever:(id)whatever NS_DESIGNATED_INITIALIZER;

@end

对儿童初始化者的任何调用都需要传播到父指定的初始化者是有意义的.让我们说默认参数对子类有意义,因此:

@interface Child : Parent

// Propagates to initWithWhatever:
- (instancetype)init NS_DESIGNATED_INITIALIZER;

@end

即使初始化程序被子类重新声明,xcode似乎仍然认为它不可用.有没有解决的办法?

解决方法

看起来这种行为在Xcode 8中得到修复(在8.1中测试).

我也有一些笔记:

>要使您的Child实现完全完成,您应该覆盖initWithWhatever或使其不可用.因为Child当然会从Parent继承这个初始化程序.
>如果你使init不可用,那么让新的不可用也是有意义的.

所以.从现在开始,我们可以在NS_DESIGNATED_INITIALIZER&帮助下完全控制我们的初始化器. Objective-C中的NS_UNAVAILABLE组合.与Swift相比,它需要更多的工作,但这是值得的.特别是如果你想让你的课程与Swift更好地兼容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读