#iphone #objective-c
#iPhone #objective-c
Вопрос:
Надеюсь, что размещение более 1 вопроса на странице не противоречит правилам.
-
У меня есть значение 1, которое изменяется в зависимости от изменения значения2. И из-за этого каждый раз, когда я меняю значение2, я нажимаю [self changeValue1], а затем запускаю некоторый код, который просматривает значение2 и изменяет значение1. Есть ли более автоматизированный способ сделать это, при котором я мог бы уведомлять приложение при изменении value2 и вызове такого метода?
-
У меня есть методы (такие как приведенный выше), к которым я не хочу, чтобы к ним был доступ извне этого класса. Как мне сделать метод закрытым?
Комментарии:
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: Пометка имени метода облегчает понимание того, что он является частным на сайте вызова .