пользовательский сеттер для NSString

У меня есть NSString, называемый fontType

и я пытаюсь создать для него настраиваемый набор:

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

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

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

  • не используйте 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 } 

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

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

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

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

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

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

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

  • Как получить информацию о содержании (наброски) в формате PDF в iOS (iPad)?
  • проверить текущий контроллер просмотра на экране в ios
  • UIBarButtonItem не отвечает на клик
  • Не-jailbreak VNC-сервер для iOS? Удаленное использование устройства iOS?
  • Xcode UI Testing Failure - вычисленная недействительная точка попадания
  • файл был создан для архива, который не связан с архитектурой (i386)
  • Могу ли я отправить в магазин приложений только код armv6 (а не armv7) для приложения, поддерживающего iOS 4.2+?
  • UIWebView tel: делегат телефонной связи не призван на iPad (но он работает на iPhone)
  • Установить сертификат на устройство iOS через OSX
  • Изображение не подходит для рамки UIImageView
  • прозрачный фоновой вид uisearchbar
  • Давайте будем гением компьютера.