пользовательский метод init в target-C - PullRequest
0 голосов
/ 10 ноября 2011

Если я пишу свой собственный метод инициализации, что бы я назвал соответствующим вызовом супер инициализации?Иногда я вижу, что это не просто метод super init, а что-то еще, каково общее правило для этого?

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

В классах Objective-C может быть несколько init методов.Обычно один из них называется «Назначенный инициализатор» и является вызовом всех остальных.

Если вы создаете подклассы и создаете метод init с другой сигнатурой, вы должны вызвать суперкласс'назначенный инициализатор (хотя вызов любого инициализатора суперкласса также будет работать).В документации для классов обычно указывается, что такое назначенный инициализатор.

Например, в UITableViewCell назначенный инициализатор - initWithStyle:reuseIdentifier:, и его следует вызывать, если вы создаете подкласс и создаете init метод с другой подписью.

0 голосов
/ 10 ноября 2011

Общее правило: вы должны звонить [super init], когда инициализируете свой класс.Таким образом, метод init класса, который вы наследуете (обычно NSObject), также будет вызван и таким образом создан.Если все классы следуют этому правилу, будет создана цепочка начальных единиц.

То же правило действует в dealloc, там вы называете [super dealloc].

0 голосов
/ 10 ноября 2011

Создавая свой собственный метод init, вы должны вызвать super init, или, если ваш объект связан с xib, вы также можете вызвать super initWithNibName:bundle: в качестве ярлыка, чтобы заставить использовать тот, который реализует ваш объект. один и только один хиб. В этом последнем случае вам также следует перегрузить initWithNibName:bundle:, чтобы сделать тот же принудительный вызов в случае, если вызывающий использует его.

Если ваш объект включен в XIB, также перегрузка initWithCoder

0 голосов
/ 10 ноября 2011

Это зависит от контекста, попробуйте ввести несколько nslogs и посмотреть, какой init вызывается для вас.Если это [super init] или что-то вроде initWithNib ...

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