Objective-C - это нормально, что нет возврата для метода? - PullRequest
1 голос
/ 30 декабря 2010

У меня есть метод, который возвращает объект, например

- (myObject *) doStuff: (NSString *)x 

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

myObj1 = [doStuff: myValue];

я просто хочу сделать таксделать это?Будут ли у меня какие-либо проблемы, такие как сбой или сумасшествие приложения?Есть ли другие альтернативы, чтобы сделать это?

Ответы [ 4 ]

4 голосов
/ 30 декабря 2010

Objective-C похож на C в этом отношении: вы всегда можете игнорировать значения, возвращаемые функциями / методами.

Однако, как и в C, важно следовать семантике, определенной функцией или методом. Например, если функция / метод возвращает указатель и предполагается, что вызывающая сторона освобождает соответствующую память, вызывающая сторона должна сохранить этот указатель в переменной и затем вызвать free (variable). Аналогично, если функция / метод возвращает объект Objective-C, принадлежащий вызывающей стороне, вызывающая сторона должна либо отправить -release или -autorelease возвращаемому объекту.

1 голос
/ 30 декабря 2010

Ничего страшного, если вы гарантируете, что управление памятью в рамках этого метода doStuff является самостоятельным. (т. е. вы используете такие вещи, как autorelease при выделении любого нового материала этим методом, чтобы память не протекала)

1 голос
/ 30 декабря 2010
- (myObject *) doStuff: x  

здесь вам также нужно объявить тип x.like

-(myObject *)doStuff:(NSString *)myValue;

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

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

А также вы можете установить значения массивов в этом методе, но объявить массив глобально. Еще одна вещь, если вы сделаете -(myObject *)doStuff:(NSString *)myValue;

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

[doStuff: myValue];
1 голос
/ 30 декабря 2010

Конечно. Методы не должны ничего возвращать, это совершенно необязательно. Вот для чего возвращается void тип:

- (void)doStuff:(int)myValue;

Отредактировано, чтобы добавить

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

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