Количество вопросов, которые у меня есть по поводу улучшения моего качества кодирования:

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Надеюсь, что размещение более 1 вопроса на странице не противоречит правилам.

  1. У меня есть значение 1, которое изменяется в зависимости от изменения значения2. И из-за этого каждый раз, когда я меняю значение2, я нажимаю [self changeValue1], а затем запускаю некоторый код, который просматривает значение2 и изменяет значение1. Есть ли более автоматизированный способ сделать это, при котором я мог бы уведомлять приложение при изменении value2 и вызове такого метода?

  2. У меня есть методы (такие как приведенный выше), к которым я не хочу, чтобы к ним был доступ извне этого класса. Как мне сделать метод закрытым?

Комментарии:

1. Для меня это звучит как работа делегата.

2. Вероятно, в следующий раз лучше просто задать один вопрос за раз.

Ответ №1:

объявление 1. Найдите в документах значение ключа, соблюдаемое.

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

В вашем MySubClass.m:

 @interface MySubclass ()

- (void)myPrivateMethod;

@end

@implementation MySubclass 

etc. etc.
  

Ответ №2:

В вопросе 1 вы можете увидеть наблюдение за значением ключа: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html

Что касается вопроса 2, вы можете добавить расширение класса в верхней части вашего файла .m с методом добавления

 @interface MyClass ()

-(void) _myPrivateMethod;

@end
  

Комментарии:

1. В чем разница между наличием _ в начале и его отсутствием?

2. это просто соглашение об именовании, чтобы знать, что этот метод является частным

3. Имена методов (и переменных), начинающиеся с подчеркивания, зарезервированы Apple. Если что-нибудь, сделайте это завершающим подчеркиванием, но я обычно не вижу в этом необходимости. Тот факт, что метод определен только в категории private, делает его намерение достаточно ясным.

4. @Johan: Пометка имени метода облегчает понимание того, что он является частным на сайте вызова .