开发者

What happens after I release a deallocated object?

I create开发者_如何学God

object *Obj = [[Obj alloc] init];

Obj retain count is 1. After I release it, the object is deallocated.

If I try to release the object again, what will happen?


EXT_BAD_ACCESS most likely since your object reference is no longer valid.


The code may crash. But it may just as well work most of the time.

You brake a rule, you may get caught. But you may just as well get away with it, living in constant fear that you may get caught later on.


There’s an important distinction to be made here: you can’t release the object again, because the object no longer exists. If you send another message to the variable (be it release or any other message), the behaviour is undefined because the variable is no longer known to point to a valid object. (It’s possible that the address the variable now points to will have been reused for a different object, in which case it may not crash, but of course that’s still a bug.)


Once the retain count of an object reaches 0, it is released, and all further attempts to access it will result in random behaviour.

If you use autorelease instead, the retain count will not be lowered, and the object will be put in the autoreleasepool. The object will only lower its retain count once it reaches the autoreleasepool drain command, which is usually done on a much higher level in a much broader scope. If you really need the object after the autoreleasepool is drained, you should retain it before drain is executed, or else it will have exactly the same behaviour as in my first paragraph.


Get EXT_BAD_ACCESS. Because of you are already release it and now try to release again.

your object reference is no longer valid.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜