如何传递指针并获得函数的结果?

时间:2010-12-19 06:20:35

标签: iphone objective-c c function

请参阅以下代码:

- (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 个答案:

答案 0 :(得分:4)

如果你在iOS或Mac OS X中使用pass-by-reference,你可能做错了。

严重 - 通过引用传递是一种非常罕见的模式。它几乎全部保留给(NSError**)跨API。

并不是说没有理由使用pass-by-reference,但这不是它。

具体来说,如果您需要返回NSNumber,请将其返回!

- (NSNumber *) foo;

如果该方法返回nil,则与返回BOOL NO一样好。它会让您遵循使用NSError的非常常见的模式:

- (NSNumber *) foo: (NSError **) error;

答案 1 :(得分:2)

理想情况下,您应该在取消引用之前检查指针:

If ( bodySize )
    *bodySize = value;

答案 2 :(得分:1)

我想你想要这个:

//bodySize =  &value;
*bodySize = value;

答案 3 :(得分:0)

我同意以上两个答案。更清楚的是,NSNumber是一个对象(与NSInteger或NSUInteger不同)。所以你应该直接指向那个对象。