【发布时间】:2017-05-29 07:41:22
【问题描述】:
我正在开发一个向调用者返回 NSData 的 API。我需要在函数参数中提供对象(而不是作为返回值)。 以下哪种方法更受欢迎?为什么?
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]];
}
【问题讨论】:
-
出于好奇,为什么不能使用返回值(如果需要,在失败时返回
nil)?它比上述两种选择都好。 -
foo2适用于方法附加数据的情况。我会做- (NSData *)foo3并返回nil而不是NO。 -
我知道最好的方法是返回 NSData。但是,我无法返回 NSData 对象,因为在真正的 API 中它会返回其他东西(API 的主要数据),我需要的 NSData 是一种次要的附加数据(可能是 nil/空)。那么假设这必须作为参数传递,哪种方法是首选?
-
您应该将此信息放在问题中。如果方法添加数据,使用
NSMutableData*,如果方法创建数据,使用NSData**。或者返回一个带有 data 和 minorData 属性的自定义对象。
标签: objective-c pass-by-reference nsdata nsmutabledata