MST

星途 面试题库

面试题:Objective-C中__attribute__扩展语法在方法声明中的常见应用

请列举Objective-C中__attribute__在方法声明时至少两种常见的应用场景,并分别给出代码示例说明其作用。
13.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 标记方法为不可继承
    • 在Objective - C中,使用__attribute__((objc_requires_super))可以标记一个方法,子类重写该方法时必须调用父类的实现。
    • 示例代码:
@interface ParentClass : NSObject
- (void)commonMethod __attribute__((objc_requires_super));
@end

@implementation ParentClass
- (void)commonMethod {
    NSLog(@"ParentClass's commonMethod");
}
@end

@interface ChildClass : ParentClass
@end

@implementation ChildClass
- (void)commonMethod {
    [super commonMethod];
    NSLog(@"ChildClass's commonMethod");
}
@end
  • 作用:确保子类在重写该方法时,不会遗漏父类的关键逻辑,有助于代码的一致性和维护性。
  1. 标记方法为已弃用
    • 使用__attribute__((deprecated))可以标记一个方法为已弃用,当其他代码调用该方法时,编译器会发出警告。
    • 示例代码:
@interface DeprecatedClass : NSObject
- (void)oldMethod __attribute__((deprecated));
@end

@implementation DeprecatedClass
- (void)oldMethod {
    NSLog(@"This is an old method.");
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        DeprecatedClass *obj = [[DeprecatedClass alloc] init];
        [obj oldMethod];// 编译器会发出警告,提示该方法已弃用
    }
    return 0;
}
  • 作用:通知开发者该方法不建议继续使用,可能有更好的替代方法,有助于代码的升级和优化。