请参阅以下代码:
- (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 !
我的问题是如何更正上面的代码?
非常感谢你的帮助!此致
答案 0 :(得分:4)
严重 - 通过引用传递是一种非常罕见的模式。它几乎全部保留给(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不同)。所以你应该直接指向那个对象。