Допустимые способы освобождения свойства

Предположим, есть класс со следующим интерфейсом:

#import <Foundation/Foundation.h>

@interface MyClass : NSObject {

}
@property (nonatomic, retain) NSDate* myDate;

-(void)foo;

@end

и следующей реализацией:

#import "MyClass.h"


@implementation MyClass
@synthesize myDate = _myDate;

- (void)dealloc
{
    [_myDate release];
    [super dealloc];
}

-(void)foo
{
    NSDate* temp = [[NSDate alloc] init];
    self.myDate = temp;
    [temp release];
}

@end

1) В функции foo будет ли освобождение, подобное этому, гарантировать, что счетчик retain объектов поддерживается должным образом (т.е. не происходит утечки памяти и ненужных освобождений).

    NSDate* temp = [[NSDate alloc] init];
    self.myDate = temp;
    [temp release];

2) Тот же вопрос, что и в 1), за исключением применения к следующей технике:

self.myDate = [[NSDate alloc] init];
[self.myDate release]

3) Тот же вопрос, что и в 1), за исключением применения к следующей технике:

self.myDate = [[NSDate alloc] init] autorelease];

4) Тот же вопрос, что и в 1), но применяется к следующей технике:

self.myDate = [[NSDate alloc] init];
[_myDate release]

5) Тот же вопрос, что и в 1), но применяется к следующей технике:

[_myDate release];
_myDate = [[NSDate alloc] init];
5
задан sashang 28 September 2011 в 02:30
поделиться