Iphone 如何在函数中传递指针并得到结果?
请参阅以下代码:Iphone 如何在函数中传递指针并得到结果?,iphone,objective-c,c,function,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 ; [
- (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 !
我的问题是如何更正上面的代码
非常感谢你的帮助
关于我想你想要这个:
//bodySize = &value;
*bodySize = value;
理想情况下,在取消引用指针之前,应始终检查指针:
If ( bodySize )
*bodySize = value;
我同意以上两个答案。更清楚地说,NSNumber是一个对象(不同于NSInteger或NSInteger)。因此,您应该直接将指针指向该对象。如果您在iOS或Mac OS X中使用“按引用传递”,则可能是做错了。 说真的——通过引用传递是一种非常罕见的模式。它几乎完全保留给API中的
(NSError**)
并不是说没有理由使用按引用传递,但事实并非如此
特别是,如果您需要返回一个NSNumber
,请返回它
- (NSNumber *) foo;
如果该方法返回nil
,则与返回BOOL
NO
一样好。它使您能够遵循使用NSError
的常见模式:
- (NSNumber *) foo: (NSError **) error;
你不能让它返回
NSNumber
对象吗?我不知道你是否已经看到了它,但是如果你正在编写这样一个方法,你真的应该看看免费的ASIHttpRequest库(实际上相当多的类),它可以让你轻松地发布数据;通过引用传递是非常罕见的正确编写的iOS应用程序。@bbum这是不正确的。在整个苹果自己的代码中,NSError
s是通过引用传递的,还有一些其他实例是通过NSScanner
传递的;这将是一个罕见的、特定的用例。。。当我说“罕见”时,我的意思是“这种模式非常罕见”,并不是说,一旦决定,特定的模式将不会被广泛使用。在整个框架API中,还有六到十二种通过引用传递的其他用途?(谢谢你的评论,当然,这很有解释力)。