我有一個關於dealloc()和viewDidUnload()方法的快速問題。我注意到很多代碼示例,人們似乎做了不同的事情。iPhone dealloc和viewDidUnload問題
另外,我想補充一點ARC是不是一種選擇。
(1)應如何設置所有屬性爲nil在的dealloc()方法,包括IBOutlets。例如,我應該釋放實例變量[_myArrary版本]並設置self.myArrary = nil。
(2)在viewDidUnload,我想我必須將所有IBOutlets至零,也即在viewDidLoad中創建的任何東西。然而,關於myString,可以說它是在調用viewDidLoad之後的另一種方法中初始化的。我應該把它設置爲零嗎?
如果我宣佈這樣一些特性:
@property (nonatomic, retain) IBOutlet UITableViewCell *myTableCell;
@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@property (nonatomic, retain) NSArray *myArrary;
@property (nonatomic, retain) NSString *myString;
I synthesize them as such:
@synthesize myArrary = _myArrary;
@synthesize myTableCell;
@synthesize myLabel;
@synthesize myString;
- (void)viewDidLoad
{
[super viewDidLoad];
_myArrary = [NSArrary alloc] initWithObjects:@"testObject", nil];
}
- (void)viewDidUnload
{
self.myArrary = nil;
self.myTableCell = nil;
self.myLabel = nil;
[super viewDidUnload];
}
- (void)dealloc
{
[_myArray release];
[super dealloc];
}
myTableCell,myLabel和myString的是沒有實例變量的屬性,它不可能說[myTableCell發佈]我知道[self.myTableCell發行]是錯誤的。 – Vikings 2012-03-26 19:37:10
其實'[myTableCell發佈]'是正確的。這些ivars是隱式創建的。 – 2012-03-26 19:46:10
根據您使用的編譯器的版本,這些都可以是有效的。 @synthesize爲你創建一個ivar - 你剛剛將'myArray' ivar重命名爲'_myArray',但其他屬性具有相同名稱的ivars。此外,如果你在'dealloc'你「可以」過關'[self.myTableCell釋放]'只要你不是多線程的......但是,這是它過於複雜 - 現在,使用getter和setter方法正如我前面所描述的那樣,並且徹底閱讀內存管理指南...或者使用ARC - 它也可用於iOS4設備。 – ikuramedia 2012-03-26 19:51:23