пользовательский установщик для NSString - PullRequest
1 голос
/ 15 марта 2012

У меня есть NSString с именем fontType

, и я пытаюсь создать для него пользовательский установщик:

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

Есть ли какие-либо проблемы с этим?

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Несколько вещей, которые выделяются для меня:

  • , не используйте self. внутри пользовательских средств доступа.прямой доступ к переменной
  • лучше использовать семантику копирования для свойств типа, который имеет изменяемый подтип
  • , будьте осторожны с // 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
}

Какао с любовью имеет хорошую статью на эту тему.Это стоит прочитать.

0 голосов
/ 15 марта 2012

Когда вы делаете self.fontType = newFontType, вы делаете [self setFontType:newFontType] (просто с другим синтаксисом), это означает, что вы вызываете метод внутри себя.

Это называется рекурсией, но в этом случае,у вас нет базового случая, в котором метод перестанет вызывать сам себя, поэтому я предполагаю, что этот метод будет вызывать сам себя до тех пор, пока не произойдет сбой приложения.Короче говоря, рекурсия здесь не то, что вам нужно.

Просто замените self.fontType = [fType retain] на fontType = [fType retain] (при условии, что переменная, связанная со свойством fontType, также называется fontType).

PS.В конце вопроса, который вы задали

Есть ли какие-либо проблемы с этим?

Если вы не попробовали это, то вам даже не следует спрашивать, чтоздесь, на StackOverflow, и если вы попробовали это сделать, то вы должны были понять, что этот метод не работает, так что последняя строка довольно бессмысленна.Просто говорю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...