Ios 如何将超级类属性设置为;只读“;

Ios 如何将超级类属性设置为;只读“;,ios,objective-c,Ios,Objective C,我创建了一个从UItableViewCell继承的类“MyView”。现在MyView为UItableViewCell的框架提供了setter和getter。但我想让它成为只读的。所以从其他类中,我应该不能设置MyView的框架。我试图重写frame属性并使其为只读。但它仍然可以设置。我遗漏了什么吗 @property(nonatomic, readonly) CGRect frame; 谢谢我认为这种行为是不允许的。但是,您可以做的是将属性的setter方法重写为no-op - (vo

我创建了一个从UItableViewCell继承的类“MyView”。现在MyView为UItableViewCell的框架提供了setter和getter。但我想让它成为只读的。所以从其他类中,我应该不能设置MyView的框架。我试图重写frame属性并使其为只读。但它仍然可以设置。我遗漏了什么吗

   @property(nonatomic, readonly) CGRect frame;

谢谢

我认为这种行为是不允许的。但是,您可以做的是将属性的setter方法重写为no-op

- (void)setFrame:(CGRect)frame
{
    NSLog(@"Do Nothing");
}

我认为这种行为是不允许的。但是,您可以做的是将属性的setter方法重写为no-op

- (void)setFrame:(CGRect)frame
{
    NSLog(@"Do Nothing");
}

您意识到
UIView
上已经有一个名为
frame
的属性,对吗?你不应该这样称呼它,它会导致奇怪的行为。给它起个别的名字,再试一次。@borrden我想这就是我的想法,覆盖现有框架属性的行为,使其成为只读。哦,我当时的误解。是的,詹姆斯,我的想法也是一样的。通过重写现有属性将使其成为只读。但是它不起作用。@iSwap您是否尝试过覆盖setter以忽略新值?不过可能有更好的方法。您知道在
UIView
上已经有一个名为
frame
的属性,对吗?你不应该这样称呼它,它会导致奇怪的行为。给它起个别的名字,再试一次。@borrden我想这就是我的想法,覆盖现有框架属性的行为,使其成为只读。哦,我当时的误解。是的,詹姆斯,我的想法也是一样的。通过重写现有属性将使其成为只读。但是它不起作用。@iSwap您是否尝试过覆盖setter以忽略新值?也许有更好的方法。是的,这会奏效,但我想这不是正确的方法。因为在编写时,它不会给出警告,并且会告诉您不允许使用。您不能从未编写的类(UIView)中删除方法。这会引起各种混乱。是的,这会起作用,但我想这不是正确的方法。因为在编写时,它不会给出警告,并且会告诉您不允许使用。您不能从未编写的类(UIView)中删除方法。那会造成各种混乱。