Когда определять методы для интерфейса, а когда нет? - PullRequest
1 голос
/ 04 сентября 2011

Я использую инфраструктуру Objective-C для разработки игр под названием Cocos2d-iphone.

Вот как я создаю графическую кнопку в игре:

CCMenuItemImage *battle;
    battle = [CCMenuItemImage itemFromNormalImage:@"BattleFightOption1.png" selectedImage:@"BattleFightOption2.png"
                                           target:self selector:@selector(battleFightOption)];

По сути,когда пользователь нажимает кнопку, запускается метод battleFightOption.

Но мне интересно, я никогда не определял battleFightOption в интерфейсе ... поэтому мой вопрос: когда необходимо определить метод винтерфейс, а когда это не так?

Ответы [ 3 ]

1 голос
/ 04 сентября 2011

Когда вы используете селектор типа @selector(methodName:), methodName: вызывается динамически во время выполнения.Компилятору не нужно знать, где он находится, и он не проверяет, существует ли метод при компиляции.

Тем не менее, это все же хорошая идея объявить его в частном порядке, что обычно делается путем установкибезымянная категория в верхней части файла .m (обычно называемая расширением класса ):

#import "Class.h"

@interface Class ()

- (void)privateMethod;

@end

@implementation Class
...
1 голос
/ 04 сентября 2011

Короче говоря, каждый метод, предназначенный для использования извне класса, должен быть объявлен в интерфейсе;методы, которые являются внутренними для реализации класса, опущены.Последние обычно объявляются в расширении класса.

0 голосов
/ 04 сентября 2011

Все, что вы собираетесь сделать общедоступным, вызывать вне класса, должно быть определено в интерфейсе.Если вы собираетесь использовать только @selector(battleFightOption), вам действительно не нужно нигде определять метод, но я бы порекомендовал вам добавить определение в расширение класса так же, как и любой другой частный метод.

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