objective-c 2.0 properties and 'retain'

Posted by Adam on Stack Overflow See other posts from Stack Overflow or by Adam
Published on 2010-03-12T03:17:13Z Indexed on 2010/03/12 3:27 UTC
Read the original article Hit count: 387

Filed under:

Stupid question, but why do we need to use 'retain' when declaring a property? Doesn't it get retained anyway when it's assigned something?

Looking at this example, it seems that an object is automatically retained when alloc'ed, so what's the point?

#import "Fraction.h"
#import <stdio.h>

int main( int argc, const char *argv[] ) {
    Fraction *frac1 = [[Fraction alloc] init];
    Fraction *frac2 = [[Fraction alloc] init];

    // print current counts
    printf( "Fraction 1 retain count: %i\n", [frac1 retainCount] );
    printf( "Fraction 2 retain count: %i\n", [frac2 retainCount] );

    // increment them
    [frac1 retain]; // 2
    [frac1 retain]; // 3
    [frac2 retain]; // 2

    // print current counts
    printf( "Fraction 1 retain count: %i\n", [frac1 retainCount] );
    printf( "Fraction 2 retain count: %i\n", [frac2 retainCount] );

    // decrement
    [frac1 release]; // 2
    [frac2 release]; // 1

    // print current counts
    printf( "Fraction 1 retain count: %i\n", [frac1 retainCount] );
    printf( "Fraction 2 retain count: %i\n", [frac2 retainCount] );

    // release them until they dealloc themselves
    [frac1 release]; // 1
    [frac1 release]; // 0
    [frac2 release]; // 0

¦output

Fraction 1 retain count: 1

Fraction 2 retain count: 1

Fraction 1 retain count: 3

Fraction 2 retain count: 2

Fraction 1 retain count: 2

Fraction 2 retain count: 1

Deallocing fraction

Deallocing fraction


This is driving me crazy!

© Stack Overflow or respective owner

Related posts about objective-c-2.0