cas*_*ora 7 iphone error-handling cocoa memory-management objective-c
有许多Cocoa方法需要NSError对象作为方法的参数,但实际上是一种在出现错误时将错误对象返回给调用方法的方法.这个返回的对象是否保留?也就是说,在调用对象代码(返回错误的方法)中,是否需要一些代码,如:
NSError *error;
[apiCall .... error:&error];
if (error){
[*error release];
}
Run Code Online (Sandbox Code Playgroud)
我没有在任何地方看到这个,如果确实需要发布,这是这样做的方法吗?
返回的对象通常是自动释放的.一般规则是你只调用auto-
/ release
如果你之前在同一个对象上调用copy
/ alloc
/ retain
.你不会error
在方法调用中取消引用:
// right
[error code]
// wrong
[*error code]
Run Code Online (Sandbox Code Playgroud)
小智 6
阅读developer.apple.com上的内存规则永远不要相信任何人重述它们,比如'你之前称为copy/alloc/retain' - 这不是规则,它实际上说的是'你通过带有副本的方法收到了对象,新的或作为名称的一部分分配'.再一次,不要相信我,请阅读developer.apple.com
至于NSError**,那就错了.METHOD将NSError**作为其参数,即指向NSError*的指针.它是NSError*的指针,它将填充来自某个地方的NSError的地址,你没有权利假设在哪里.
您只能传递指向NSError*的指针 - 其他任何错误.
你也不应该假设NSError是自动释放的.它可以是单身,也可以是任意数量的替代品.所有你需要知道的是'你没有保留它,你不需要释放它'.
归档时间: |
|
查看次数: |
3241 次 |
最近记录: |