hachinoBlog

hachinobuのエンジニアライフ

プロパティのassignとretainの解放について

今更ながらassignとretainが良く分からなくなった。
assignは基本的にreleaseしないという認識だったが下記のような場合は当然releaseしないとメモリリーク

@interface SampleVC()
@property (assign, nonatomic) UIView *view1
@end

@implementation SampleVC

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view1 = [[UIView alloc] init]; //view1をallocしてinitしているのでretainCount+1
}

- (void)dealloc
{
    [super dealloc];
    NSLog("retainCount:%d", [view1 retainCount]); //1
    [_view1 release];
}

assignで宣言していても、その変数を明示的にalloc+initしてる場合はreleaseしてあげないといけない。
releaseしなくて良いのは値の受け渡しで使用する場合ですね。
逆にretainで宣言した変数を明示的にalloc+initした場合はreleaseを2回してあげないといけない。