2017-05-29 36 views
0

我正在开发一个API,它将NSData返回给调用者。我需要在函数参数中提供对象(而不是作为返回值)。 以下哪种方法是首选,为什么?Objective C - 有什么更好的传递给NSData或使用NSMutableData

NSData* data; 
[self foo1:&data]; 

-(BOOL)foo1:(NSData**)data { 
    *data = [@"1234" dataUsingEncoding:NSUTF8StringEncoding]; 
    ... 
} 

NSMutableData* data = [[NSMutableData alloc] init]; 
[self foo2:data]; 

-(BOOL)foo2:(NSMutableData*)data { 
    [data setData:[@"1234" dataUsingEncoding:NSUTF8StringEncoding]]; 
} 
+1

出于好奇,为什么你不能使用返回值(如果需要,在失败时返回'nil')?这比以上两个选项都要好。 – Rob

+0

当方法附加数据时,'foo2'是合适的。我会做' - (NSData *)foo3'并返回'nil'而不是'NO'。 – Willeke

+0

我知道最好的方法是返回NSData。然而,我不能够返回NSData对象,因为在真正的API中,它返回了其他的东西(API的主要数据),我需要的NSData是一些较小的附加数据(可能是零/空)。所以假设这必须作为参数传递,哪种方法是首选? – liorco

回答

0

由于@Willeke。我将采纳你的建议 - 如果方法添加数据,则使用NSMutableData *,如果方法创建数据,则使用NSData **。

1

更好的是异步响应:

- (void)fooWithCompletion:(void (^)(NSData *responseData, NSError *responseError))completion; 
+1

OP的问题中没有任何内容表明任何类型的昂贵或阻塞操作正被用于生成数据。如果在调用方法时数据已经可用,则没有理由增加这种复杂性。 – bbum

相关问题