我有一個自定義視圖類,它是UITableViewCell的一個子類。ARC能否足夠聰明地發佈超類中定義的子視圖?
我從這個子類繼承其他兩個自定義視圖類(他們分享了很多相同的屬性,但足以給不同需要單獨的類)。
我已經聲明瞭共享屬性在在各自所屬類別MyParentCell,也宣佈其獨特的性質。
UITableViewCell
|
|
MyParentCell // defines propertyA and propertyB, both IBOutlet subviews
/\
/ \
/ \
| |
| ChildClass1 // defines propertyC, an IBOutlet subview
|
ChildClass2 // defines property D, an IBOutlet subview
我的問題是:由於我使用ARC,不能顯式調用[super delloc];
當我在定義dealloc:
ChildClass1和ChildClass2做,我必須釋放所有他們所擁有的每個子視圖類,還是MyParentCell#dealloc仍然會被調用?
即
我必須這樣寫:
// ChildClass1.m
@implementation ChildClass1
-(void)dealloc
{
self.propertyA = nil;
self.propertyB = nil;
self.propertyC = nil;
}
@end
// ChildClass2.m
@implementation ChildClass2
-(void)dealloc
{
self.propertyA = nil;
self.propertyB = nil;
self.propertyD = nil;
}
@end
抑或是足以寫:
// MyParentCell
@implementation MyParentCell
-(void)dealloc
{
self.propertyA = nil;
self.propertyB = nil;
}
@end
// ChildCell1.m
@implementation ChildCell1
-(void)dealloc
{
self.propertyC = nil;
}
@end
// ChildCell2.m
@implementation ChildCell2
-(void)dealloc
{
self.propertyD = nil;
}
@end
如果第二種方法是好的,有人可以解釋何時如何調用MyParentCell#dealloc?
如果第一種方法是必要的,吸住:/
設置self.property爲零目前還只是推薦使用viewDidUnload和的.xib時IBOutlets,在你的情況下,它肯定不是必要的。雖然這是你的關注,如果ARC實際上是零這個屬性是可以理解的:) – 2012-02-25 14:05:53
我正在加載一個自定義xib文件到表 - 據我所知'viewDidUnload'是一個UIViewController事件,所以不會被調用在自定義子視圖的情況下。這是否意味着我不必擔心將它的子視圖設置爲零? – bodacious 2012-02-25 14:11:22
你是對的 - 我的觀點是,仍然會建議零價錢。在你的情況下,它不是必需的。 – 2012-02-25 14:28:47