我创建了
object *Obj = [[Obj alloc] init];
Obj保留计数为1.释放后,对象被解除分配。
如果我再次尝试释放该对象,会发生什么?
答案 0 :(得分:5)
EXT_BAD_ACCESS
最有可能,因为您的对象引用不再有效。
答案 1 :(得分:1)
代码可能会崩溃。但它大部分时间都可以正常工作。
你制定规则,你可能会被抓住。但你也可以侥幸逃脱它,生活在不断的恐惧中,以后你可能会被抓住。
答案 2 :(得分:1)
这里有一个重要的区别:你不能再次发布对象,因为该对象不再存在。如果您向变量(无论是release
还是其他任何消息)发送另一条消息,则行为未定义,因为不再知道该变量指向有效对象。 (变量现在指向的地址可能会被重用于另一个对象,在这种情况下它可能不会崩溃,但当然这仍然是一个错误。)
答案 3 :(得分:0)
获取EXT_BAD_ACCESS。因为你已经发布了它,现在又试着再次发布。
您的对象引用不再有效。
答案 4 :(得分:0)
一旦对象的保留计数达到0,它就会被释放,所有进一步尝试访问它都会导致随机行为。
如果您使用autorelease,则不会降低保留计数,并且该对象将被放入autoreleasepool中。一旦达到autoreleasepool drain命令,该对象将仅降低其保留计数,这通常在更广泛的范围内在更高级别上完成。如果在autoreleasepool耗尽后你确实需要该对象,你应该在执行drain之前保留它,否则它将与我的第一段完全相同。