You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写类似UITableViewController的自动生成代码桩的基类

实现子类继承基类自动生成代码桩与警告的方案

在Objective-C中没有原生抽象类机制,但可以通过协议+基类默认实现结合自定义Xcode模板的方式,实现类似UITableViewController的自动代码生成效果,具体方案如下:

1. 协议+基类模拟抽象方法(强制子类实现)

先通过协议声明需要子类实现的方法,再在基类中编写这些方法的默认实现,加入警告提示和断言,确保子类必须重写:

// 声明必要方法的协议
@protocol BaseClassRequiredMethods <NSObject>
- (int)thisNeedsToBeImplemented;
@end

// 基类定义
@interface BaseClass : NSObject <BaseClassRequiredMethods>
@end

@implementation BaseClass
- (int)thisNeedsToBeImplemented {
    #warning Incomplete implementation, return the int value needed.
    // 运行时强制检查,未重写则崩溃提示
    NSAssert(NO, @"子类必须重写此方法");
    return 0;
}
@end

子类继承BaseClass后,若未重写该方法,编译时会看到警告,运行时触发断言崩溃,强制开发者实现。

2. 自定义Xcode模板实现自动生成代码桩

要让子类创建时自动生成方法代码桩,需要修改Xcode的类模板:

  • 找到Xcode默认模板目录:/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Objective-C Class.xctemplate
  • 复制一份模板并重命名(比如BaseClass Subclass.xctemplate)
  • 修改模板内的___FILEBASENAME___.m文件,添加需要自动生成的方法桩:
@implementation ___FILEBASENAMEASIDENTIFIER___

- (int)thisNeedsToBeImplemented {
    #warning Incomplete implementation, return the int value needed.
    return 0;
}

@end
  • 调整TemplateInfo.plist,设置模板的显示名称和基类关联,之后通过Xcode新建文件时选择自定义模板,就能自动生成带警告的方法桩。

3. 运行时检查强化约束

在基类的初始化方法中,通过运行时API遍历协议方法,检查子类是否实现,未实现则打印警告或触发断言:

- (instancetype)init {
    self = [super init];
    if (self) {
        Protocol *requiredProto = @protocol(BaseClassRequiredMethods);
        unsigned int methodCount;
        struct objc_method_description *methodDescs = protocol_copyMethodDescriptionList(requiredProto, YES, YES, &methodCount);
        
        for (NSUInteger i = 0; i < methodCount; i++) {
            SEL methodSel = methodDescs[i].name;
            if (![self respondsToSelector:methodSel]) {
                NSLog(@"⚠️ 警告:子类未实现必要方法 - %@", NSStringFromSelector(methodSel));
                NSAssert(NO, @"子类必须实现方法:%@", NSStringFromSelector(methodSel));
            }
        }
        free(methodDescs);
    }
    return self;
}

内容的提问来源于stack exchange,提问作者rnorvil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:35:24