NSString的自定义setter

时间:2012-03-15 01:57:06

标签: iphone objective-c ios ipad

我有一个名为fontType的NSString

我正在尝试为它设置一个自定义设置器:

- (void) setFontType:(NSString *) fType
{   
    if (self.fontType != fType){
        [fontType release];
        self.fontType = [fType retain];
        //some more custom code
    }
}

这有什么问题吗?

2 个答案:

答案 0 :(得分:4)

一些对我来说很突出的事情:

  • 不要在自定义访问者中使用self.。直接访问变量
  • 最好将复制语义用于具有a的类型的属性 可变子类型
  • 小心// some more custom code

我的个人风格偏好如下:

-(void)setFontType:(NSString *)fontType_ {
   if (fontType == fontType_) return; // get out quick, flatten the code

   [fontType release];
   fontType = [fontType_ copy];

   // some more code
}

Cocoa with Love在这个主题上有一个good article。值得一读。

答案 1 :(得分:0)

执行self.fontType = newFontType时,您正在执行[self setFontType:newFontType](只是使用不同的语法),这意味着您正在调用自身内部的方法。

这称为递归,但在这种情况下,你没有一个基本情况,方法将停止调用自己,所以我的猜测是这个方法会调用自己,直到应用程序崩溃。简而言之,递归不是你想要的。

只需将self.fontType = [fType retain]替换为fontType = [fType retain](假设链接到fontType属性的var也称为fontType)。

PS。在问题的最后你问了

  

这有什么问题吗?

如果你没有尝试这个,那么你甚至不应该在StackOverflow上问这个,如果你确实尝试过,那么你应该意识到这个方法不起作用,所以最后一行很漂亮无意义的。只是说。