我使用带有其他视图的NSMutableArray的UIView子类来将值指示为条形
我在initWithFrame中初始化它。仪器告诉我创建和删除我的UIView子类之后,NSMutableArray的alloc有一个泄漏。
这就是为什么我用if框架它以避免多个对象。但是没有帮助
- (id) initWithFrame :(CGRect)frame
{
self = [super initWithFrame:frame];
if (self.uiValueSubviews == nil){
self.uiValueSubviews = [[NSMutableArray alloc]init];
}
return self;
}
- (void)dealloc {
[self.uiValueSubviews release];
[super dealloc];
}
我是否对dealloc做错了什么? 感谢您的帮助
答案 0 :(得分:5)
我在涉及您的财产的内存管理中遇到两个问题。
autorelease
d对象或
你要释放的对象
自己的。[_uiValueSubviews release];
)将代码更改为以下内容。
- (id) initWithFrame :(CGRect)frame
{
self = [super initWithFrame:frame];
if (self.uiValueSubviews == nil){
//Set to autoreleased array
self.uiValueSubviews = [NSMutableArray array];
}
return self;
}
- (void)dealloc {
//nil the value
self.uiValueSubviews = nil;
[super dealloc];
}
答案 1 :(得分:1)
你应该这样做:
- (id) initWithFrame :(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
if (self.uiValueSubviews == nil){
uiValueSubviews = [[NSMutableArray alloc]init];
}
return self;
}
- (void)dealloc
{
self.uiValueSubviews = nil;
[super dealloc];
}
uiValueSubviews可能是一个保留属性,所以当你分配时,你的retainCount是+1和self。 +1也是。
答案 2 :(得分:1)
另一种避免自动释放对象的方法是:
// ...
if (self.uiValueSubviews == nil)
{
NSMutableArray *uiValueSubviews_tmp = [[NSMutableArray alloc] init];
// maybe do something with uiValueSubviews_tmp
self.uiValueSubviews = uiValueSubviews_tmp;
[uiValueSubviews_tmp release];
}
// ....
据我所知,Apple就是这样做的例子。