objective-c - 防止类在 Objective-c 中被子类化

标签 objective-c

如何防止特定类被子类化? 我不知道该语言中的此类功能(例如 final 关键字)。但是 Apple 表示它已经对 AddressBookUI.framework(在 iOS 中)中的所有类都这样做了

出于教育目的,我怎样才能实现相同的功能,或者他们会怎么做?

来自 iOS7 Release Notes(Requires login) :

enter image description here

最佳答案

这是一种方法:从您的“最终”类中覆盖 allocWithZone:(用 MyFinalClassName 代替您的实际类名),如下所示:

+ (id)allocWithZone:(struct _NSZone *)zone
{
    if (self != [MyFinalClassName class]) {
        NSAssert(nil, @"Subclassing MyFinalClassName not allowed.");
        return nil;
    }

    return [super allocWithZone:zone];
}

这将防止不是 MyFinalClassName 成员的子类被 alloc 处理(因此也被 init 处理) ,因为 NSObjectallocWithZone: 最终必须被调用,并且通过拒绝从您的“最终”类调用 super ,您将防止这种情况发生.

关于objective-c - 防止类在 Objective-c 中被子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19194807/

相关文章:

ios - Swift - 未设置默认属性值

ios - 如何像 Foursquare 一样在 UITableView 中放置一个按钮 "over"

ios - 什么是控制对存储服务器调用结果的属性的访问的正确方法?

objective-c - 从restkit商店设置神奇记录默认上下文

ios - 在 Swift 应用程序中集成闭源混合 Swift 和 Objective-C 框架

ios - 使用动画更改状态栏样式

ios - 注册 apns 推送通知时是否需要检查互联网连接

iphone - 使用 NSDictionary (userInfo) 调用方法

iphone - iOS 不使用 -568h@2x.png

ios - 将 modalPresentationStyle 设置为自定义会导致 MFMailComposeViewController 中的状态栏颜色错误