как передать указатель и получить результат в функции? - PullRequest
0 голосов
/ 19 декабря 2010

см. Код следующим образом:

- (BOOL)postAction :( NSString*) url  params:(NSDictionary*) params  bodySize:(NSNumber**)bodySize
{
... 
int size = 1999;

NSNumber* value =[[NSNumber alloc] initWithInt:size];


bodySize =  &value;


 ...}

используйте функцию следующим образом:

NSNumber* size ;  
[self postAction:@"http://webserver/ss.php" params:params bodySize:&size];



// can not got the size value at all…


 int i = [size intValue]; 
//will throw nil exception !

Мой вопрос заключается в том, как исправить этот код выше?

большое спасибо за вашу помощь!

С уважением

Ответы [ 4 ]

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

Если вы используете передачу по ссылке в iOS или Mac OS X, вы, вероятно, делаете это неправильно.

Серьезно - передача по ссылке - чрезвычайно редкий шаблон для использования.Это в значительной степени полностью зарезервировано для (NSError**) через API.

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

В частности, если вам нужно вернуть NSNumber, тогда верните его!

- (NSNumber *) foo;

Если этот метод возвращает nil, это так же хорошо, как возвращать BOOL NO.И это настраивает вас на использование очень распространенного шаблона использования NSError:

- (NSNumber *) foo: (NSError **) error;
2 голосов
/ 19 декабря 2010

В идеале вы всегда должны проверять указатель перед разыменованием:

If ( bodySize )
    *bodySize = value;
1 голос
/ 19 декабря 2010

Я думаю, вы хотите это:

//bodySize =  &value;
*bodySize = value;
0 голосов
/ 19 декабря 2010

Я согласен с двумя приведенными выше ответами.Чтобы быть более понятным, NSNumber является объектом (в отличие от NSInteger или NSUInteger).Таким образом, вы должны прямо указать указатель на этот объект.

...