[英]What happens after I release a deallocated object?
我建立
object *Obj = [[Obj alloc] init];
对象保留计数为1。释放它后,对象将被释放。
如果我尝试再次释放该对象,将会发生什么?
EXT_BAD_ACCESS
最有可能是因为您的对象引用不再有效。
代码可能会崩溃。 但这在大多数时候都可以正常工作。
违反规则可能会被抓。 但是您可能同样会摆脱它,一直生活在担心自己以后会被抓住的恐惧中。
这里有一个重要的区别:您不能再次释放该对象 ,因为该对象不再存在。 如果您向变量发送了另一条消息( release
消息或其他消息),则该行为是不确定的,因为不再知道该变量指向有效对象。 (该变量现在指向的地址可能已被其他对象重用,在这种情况下它可能不会崩溃,但是当然这仍然是一个错误。)
获取EXT_BAD_ACCESS。 由于您已经发布了它,现在尝试再次发布。
您的对象引用不再有效。
一旦对象的保留计数达到0,它就会被释放,并且所有进一步访问它的尝试都会导致随机行为。
如果改用自动释放,则保留计数不会降低,并且该对象将放入自动释放池。 对象只有在到达自动释放池排出命令时才会降低其保留计数,通常在更大范围内以更高的级别执行该操作。 如果排空autoreleasepool后确实需要该对象,则应在执行排水之前将其保留,否则它将具有与我的第一段完全相同的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.