Objective-C ref count and autorelease

Posted by turbovince on Stack Overflow See other posts from Stack Overflow or by turbovince
Published on 2010-06-17T04:18:25Z Indexed on 2010/06/17 4:23 UTC
Read the original article Hit count: 234

Hey guys, suppose the following code:

int main (int argc, const char * argv[]) 
{
//[...]
    Rectangle* myRect  = [[Rectangle alloc] init];

    Vector2* newOrigin = [[[Vector2 alloc] init] autorelease]; // ref count 1

    [newOrigin setX: 50.0f];
    [myRect setOrigin: newOrigin];    // ref count 2

    [myRect.origin setXY: 25.0f :100.0f]; // ref count goes to 3... why ?

    [myRect release];

    [pool drain];
    return 0;
}

Rectangle's origin is declared as a (retain) synthesized property. Just wondering 2 things:

  1. Why does ref count goes to 3 when using the getter accessor of Rectangle's origin? Am I doing something wrong ?
  2. With a ref count of 3, I don't understand how this snippet of code cannot leak. Calling release on myRect will make it go down to 2 since I call release on the origin in dealloc(). But then, when does autorelease take effect?

Thanks!

© Stack Overflow or respective owner

Related posts about objective-c

Related posts about memory-management