Лучше ли вернуть NSArray или void и обновить свойство self? - PullRequest
0 голосов
/ 08 апреля 2011

Я работаю над классом делегата, который управляет несколькими представлениями, и обнаруживаю, что переключаюсь между обновлением свойств в делегате и возвращением значений из методов.Как правильно это сделать?

- (NSArray) blah {return myarray;}

или - (void) blah {[self myarray: value]}

--------------- Разъяснение вопроса ниже

если у меня есть вспомогательный метод, который преобразует NSArray в NSDictionary, я должен вызвать свой вспомогательный метод и ожидать возврата NSDictionary, или я должен обновить переменную в памяти и вернуть void.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

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

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

ВАРИАНТ 1) Если это действительно вспомогательный метод, я считаю, что вы должны вернуть NSDictionary из метода.Я предполагаю, что он снова распределен в этом методе.

Другими словами, предпочтите:

+ (NSDictionary *) dictFromArray:(NSArray *);

Если у него есть полезность вне одного класса, вы можете поместить его в разумныйкласс, который собирает связанные вспомогательные методы.

Альтернативный подход к передаче пустого словаря для заполнения практикуется в C, потому что он создает симметрию вокруг распределения и освобождения и проясняет, кому принадлежит память.

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

Например:

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
dictFromArray(myArray, myDict);

Когда речь заходит о том, кто владеет объектом, вы должны придерживаться соглашений Objective C, где:

+ (NSDictionary *) dictFromArray:(NSArray *)array

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

ВАРИАНТ 2) Если функциональность специфична для отдельного класса и этот класс имеет словарь в качестве члена, то я быв массиве, обновите переменную-член словаря, используя содержимое массива, и верните void.

Что-то вроде:

- (void) setBlahFromArray:(NSArray *)array
0 голосов
/ 08 апреля 2011

Вопрос запутанный как заявлено.Если они являются свойствами, то у вас есть методы доступа, которые обычно включают в себя что-то вроде:

-(void) setMyValue: (NSString*) inNewValue;
-(NSString*) myValue;

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

...