【问题标题】:Objective C - What is better pass a ref to NSData or use NSMutableData目标 C - 将 ref 传递给 NSData 或使用 NSMutableData 更好
【发布时间】: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


【解决方案1】:

最好是异步响应:

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

【讨论】:

  • OP 的问题中没有任何内容表明正在使用任何类型的昂贵或阻塞操作来生成数据。如果在调用方法时数据已经可用,则没有理由增加这种复杂性。
【解决方案2】:

感谢@Willeke。我将采纳您的建议 - 如果方法添加数据,请使用 NSMutableData*,如果方法创建数据,请使用 NSData**。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2010-12-11
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多