我不知道如何处理释放这个对象:
H:
@interface AHImageView : UIScrollView
{
UIImageView *imageView;
}
@property (nonatomic, retain) UIImageView *imageView;
的.m:
-(id)initWithFrame:(CGRect)frame {
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
[self addSubview:self.imageView];
}
-(void)dealloc {
[super dealloc];
self.imageView = nil;
[self.imageView release];
}
我得到的错误是:
对象的引用计数的不正确减少 此时由来电者拥有
此错误指向[self.imageView release];
行。
答案 0 :(得分:4)
您正在nil
致电发布。删除self.imageView=nil;
(释放imageView并将其设置为nil)或[imageView release];
(仅释放imageView,但不会进一步使用它,因此没有理由将其设置为nil)。
编辑: 正如@Bavarious所说,这里有泄漏:
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
你应该这样称呼它:
self.imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)] autorelease];
答案 1 :(得分:0)
为了避免释放和泄漏问题,请修改dealloc方法的代码。
-(void)dealloc
{
[imageView release];
self.imageView = nil;
[super dealloc];
}
问题解决了。
答案 2 :(得分:0)
你的dealloc方法有两个错误:
(1)您应该将[super dealloc]
作为最后行放在您的dealloc中
如果先调用[super dealloc]
,那么您的对象所在的内存将被释放(并可能被其他内容使用)。在那之后,你不能使用你的对象的成员,他们不再是你的了!
(2)最好不要在dealloc方法中使用属性。你不知道这会导致什么(其他对象可能通过KVO监听,子类可能已经覆盖了setter来做其他事情等)。
你正确的dealloc应该是这样的:
- (void)dealloc {
[imageView release];
[super dealloc];
}
希望有所帮助!