Что значит вернуть объект в метод? - PullRequest
1 голос
/ 02 марта 2010

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

Если у меня есть что-то вроде этого:

-(ClassName *) methodName: (int) arg {

return arg;

}

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

Вы бы вернули объект, вернув объект. Например, вы можете игнорировать аргумент:

- (ClassName *)methodName:(int)arg {
    return [[[ClassName alloc] init] autorelease];
}

Вы можете превратить int в объект:

- (NSNumber *)methodName:(int)arg {
    return [NSNumber numberWithInt:arg];
}

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

1 голос
/ 02 марта 2010

Приведенный выше метод возвращает указатель на arg типа ClassName *.

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

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

Другой вариант - вернуть копию значения. Это означало бы сделать копию и вернуть ее.

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

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

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

Может, уточните, что именно вы ищете?

0 голосов
/ 02 марта 2010

Думайте о методах, как будто они являются функциями в математике. В математике sin(180) равно 0. sin - это метод, 180 - это аргумент, а 0 - это возвращаемое значение метода. Пример греха в target-c может выглядеть так:

-(double) sin:(double)angleInDegrees;
{
    double sinValue;
    //calculate the return value here and store it in sinValue.
    //for example, if angleInDegrees is 180, then set sinValue to 0
    return sinValue;
}

Возврат объектов точно такой же. Посмотрите на этот пример:

-(NSString*) sayHelloTo:(NSString*)name;
{
    return [NSString stringWithFormat:@"Hello %@!", name];
}

Если бы я написал ее как математическую функцию, то sayHelloTo(@"Tom") равно @"Hello Tom!". Единственное отличие состоит в том, что @"Hello Tom!" является NSString объектом, а не double.

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