- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
-(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];
自动释放语义是否安全地将错误
传送到我的第二个代码块?
最佳答案
根据 the clang ARC spec ,形式为 NSError **
的方法参数(或者更确切地说,指向任何 obj-c 对象的指针)被隐式假定为 NSError * __autoreleasing *
。这意味着错误将在方法中自动释放。
至于调用站点,如果您使用 __autoreleasing
变量调用它,那么一切都很好。事实上,我推荐这种模式。但是,如果您改为使用 __strong
变量调用它,它仍然可以工作。在这种情况下,编译器将生成一个未命名的 __autoreleasing
临时文件,将其地址传递给方法,然后在返回时将临时文件分配给 __strong
。所以如果你有
NSError *foo;
[bar callMethodWithError:&foo];
编译器会把它当作
NSError *foo;
NSError * __autoreleasing tmp = foo;
[bar callMethodWithError:&tmp];
foo = tmp;
It's actually slightly more complicated than that如果输出参数被标记为 out
,但它通常是这样工作的。
关于ios - 以下 iOS 代码安全吗? (__autoreleasing 语义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487096/
我在返回错误的 Apple 函数中注意到了这种模式 error:(NSError *__autoreleasing *)outError 我理解它的意思,它是指向指针的指针,用于执行结果(仅使用 *
在 AFNetworking 中我找到了这个函数: - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
我有一个街区; typedef void (^SIResponseHandler) (id obj, NSString *error); 和方法: + (void)uploadPhoto:(UIIma
如何使变量的地址成为 NSObject 中的强属性?我有一个名为 SCPFMessageThreadQuery 的类,它是通过传递 SCPFMessageThread 变量的地址来分配初始化的。 @i
所以我像往常一样将一个指向 NSError 对象的指针传递给一个方法。它曾经很简单: -(BOOL)foo:(NSString *)string error:(NSError **)error 但是对
我拼命想了解 __autoreleasing 关键字在 Objective-C 中的用法。我已仔细阅读以下问题的答案: In which situations do we need to write
根据 Transitioning to ARC Release Notes : __autoreleasing is used to denote arguments that are passed
有人可以向我解释在以下示例代码块中使用 __autoreleasing 的目的吗? - (void)execute:(NSError * __autoreleasing *)error { /
我一直都知道这种模式是管理 NSError** 参数(特别是 BOOL 返回值和 NSError* __autoreleasing * 参数: -(BOOL)doSomethingWithString
我正在尝试将旧的非 ARC 项目转换为 ARC,但出现此编译错误:“无法在 block 中捕获 __autoreleasing 变量” - (void)animateViewController:(_
-(NSData *)jsonRepresentation:(NSError **error)error { NSDictionary *dict = [self getDictRepresen
考虑这段代码: @implementation MyClass -(void)dealloc { NSLog(@"MyClass dealloc: %@", self); } @end @im
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: In which situations do we need to write the __autorele
根据 Cocoa 的“创建规则”,返回新实例化对象的方法必须以 new、create 或 copy 开头,如果所有权转移给调用者。 假设我有一个实现名为 (NSObject *)getCorrectO
在学习 NSInvocations 时,我对内存管理的理解似乎存在差距。 这是一个示例项目: @interface DoNothing : NSObject @property (nonatomic,
我正在尝试完成这个谜题。 __strong 是所有 Objective-C 可保留对象指针(如 NSObject、NSString 等)的默认值。它是一个强引用。 ARC 在作用域末尾用 -relea
为什么 Apple 的方法没有将 NSError** 声明为 NSError * __autoreleasing * ? Transitioning to ARC Release Notes似乎暗示他
我正在尝试从 id __autoreleasing * 转换为 CFTypeRef * (void **)。 我试过: id __autoreleasing *arg = [OCMArg setTo:
在 ARC 下,输出参数采用以下形式(默认情况下;这等同于 NSError **): - (BOOL)tryWithError:(NSError *__autoreleasing *)err; 来自T
我正在尝试使用 PowerPlot 库绘制条形图。因此,我发现只有这个代码可以满足我对负条以及阴影或不透明度的要求。原始示例项目不使用 ARC。但是我的项目使用 ARC。在复制相同的代码时,我在编译项
我是一名优秀的程序员,十分优秀!