【发布时间】:2013-03-18 21:16:09
【问题描述】:
-(NSData *)jsonRepresentation:(NSError **error)error {
NSDictionary *dict = [self getDictRepresentation];
return [NSJSONSerialization dataWithJSONObject:dict options:nil error:error];
}
// Some other place...
NSError *__autoreleasing error = nil;
NSData *json = [obj jsonRepresentation:&error];
自动释放语义是否安全地将error 向上传递到我的第二个代码块?
【问题讨论】:
-
这些自动释放机制实际上是为局部变量隐含的(除了少数例外),不需要明确说明。但是,是的,它是正确的。
-
@RichardJ.RossIII:你什么意思? obj-c 类型的局部变量默认为
__strong,除非另有说明。 -
@KevinBallard 我的意思是,只要它们可以延长声明它们的块的生命周期,它们的行为就像一个自动释放值。特别是返回值变成 __autoreleasing(当然,除非您指定另一个返回类型属性)。在极少数情况下真正需要 __autoreleasing。
-
@RichardJ.RossIII:我不确定你想说什么。方法的返回值根本不是所有权限定的。相反,它们被认为是“保留的返回值”或“未保留的返回值”,在后一种情况下,ARC 只保证对象将在调用边界上存活。这可能涉及将其放入自动释放池中,也可能不。
标签: ios automatic-ref-counting autorelease