MST

星途 面试题库

面试题:Objective-C 中如何通过扩展实现类的隐藏属性

请简述在Objective-C中,利用扩展(Category)为类添加隐藏属性的基本步骤,并给出一个简单的代码示例。
40.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

基本步骤

  1. 创建类的扩展(Category),在扩展的接口文件中声明属性。
  2. 在扩展的实现文件中,通过关联对象(Associated Objects)技术来为属性提供存储。

代码示例

假设有一个Person类,以下是为其添加隐藏属性的过程:

  1. Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;

@end
  1. Person+HiddenProperty.h
#import "Person.h"

@interface Person (HiddenProperty)

@property (nonatomic, copy) NSString *hiddenInfo;

@end
  1. Person+HiddenProperty.m
#import "Person+HiddenProperty.h"
#import <objc/runtime.h>

static const char *kHiddenInfoKey = "kHiddenInfoKey";

@implementation Person (HiddenProperty)

- (void)setHiddenInfo:(NSString *)hiddenInfo {
    objc_setAssociatedObject(self, kHiddenInfoKey, hiddenInfo, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)hiddenInfo {
    return objc_getAssociatedObject(self, kHiddenInfoKey);
}

@end
  1. 使用示例
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Person+HiddenProperty.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *person = [[Person alloc] init];
        person.name = @"John";
        person.hiddenInfo = @"Some secret info";
        NSLog(@"Name: %@, Hidden Info: %@", person.name, person.hiddenInfo);
    }
    return 0;
}