有一个A级课程:

@interface ClassA : NSObject {
}
@property (nonatomic, assign) id prop1;
@end

@implementation
@synthesize prop1;
@end

然后我有子类

@interface ClassB : ClassA {
}
@end

@implementation

- (id)init {
    self = [super init];
    if (self) {
    }
    return self;
}

//This is infinite loop
- (void) setProp1:(id)aProp
{
    self.prop1 = aProp;
}
@end

这是无限循环,因为ClassB中的setProp1从ClassB中调用[ClassB setProp1:val].

我已经试过打电话给[super setProp1],但是这个

如何覆盖@property并在覆盖的setter中赋值?假设我不能修改ClassA.

推荐答案

只需直接分配给实例变量,无需使用点语法调用setter:

- (void) setProp1:(id)aProp
{
    self->prop1 = aProp;
}

然而,这就引出了一个问题.这个访问器所做的一切正是父访问器应该做的——那么重写父访问器有什么意义呢?

Objective-c相关问答推荐

iOS:警告try 呈现其视图不在窗口层次 struct 中的 ViewController

将 NSArray 保存到 NSUserDefaults 并在 NSMutableArray 中获取它

如何创建圆形按钮?

KVO - 如何判断对象是否是观察者?

pathForResource 返回 null

将 CSS 插入 UIWebView / WKWebView 中加载的 HTML

处理 ARC 中的指针对指针所有权问题

Objective-C 浮点舍入

烦人的[Environment: Sandbox]提示

如何以编程方式暂停 NSTimer?

如何在使用 React Native 时实现 SSL 证书固定

iOS框架改变一个属性(例如宽度)

在运行时判断 iOS 版本?

参考代码中的内部版本号或版本号

在 iPhone 上测量人体胀气( Human-Flatulence)传播波包

iPhone:在 UITextField 上禁用 Auto-Cap/autocorrect 问题

在 UITableView 的 iOS 文档目录中列出保存的文件?

点击手势识别器 - 哪个对象被点击了?

UITableView ,重新加载时滚动到底部?

@synthesized 保留属性的释放是如何处理的?