Неправильно ли вызывать метод init несколько раз? - PullRequest
1 голос
/ 13 сентября 2010

Если я получаю обновления данных - например, скажем, какой-то новый возвращенный JSON - то, что люди считают более чистым?

a) Просто освободите все старые объекты, а затем создайте новые.

или

b) Иметь - (id) initWithJSON: инициализаторы типа json, которые могут «сбрасывать» данные, содержащиеся в объекте, для использования новых передаваемых данных.

Второй случай будет означать многократный вызов методов init и их кодирование, чтобы быть осторожным с выпуском / копированием содержащихся объектов.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2010

(а) определенно лучше.В общем, алгоритмы, которые используют неизменяемые, а не изменяемые структуры данных, легче писать и рассуждать.Если профилирование показывает, что (а) нежизнеспособно, то (и только тогда) рассмотрим (б).Если вы пойдете по этому пути, сделайте одолжение вашим будущим сопровождающим и используйте метод resetWithJSON: или какой-нибудь такой.Вы можете извлечь общий код между методами init и reset, но пусть ваш публичный API имеет оба метода, чтобы ваше намерение было ясным.

2 голосов
/ 13 сентября 2010

Барри уже ответил на него, но позвольте мне сформулировать это по-другому:

Определенно а) - это обычный подход.

Вы можете повторно использовать объект, как вы предлагаете в б), но когда выдля этого никогда не создавайте свой класс так, чтобы вы вызывали методы с именем init... более одного раза .Это противоречит всем установленным обычаям Objective-C.

Например, NSMutableString.Вы можете инициализировать один с помощью

  NSMutableString* ms=[[NSMutableString alloc] initWithString:@"boo"];

и сбросить его, набрав

  [ms setString:@"bar"];

, но вы никогда не сделаете

  [ms initWithString:@"boo"];

.методы с именем init... должны появляться только вместе с alloc, а не где-либо еще.

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