#import <UIKit/UIKit.h>
@interface imageNavView : UIImageView {
int index;
}
@property int index;
@end
#import "imageNavView.h"
@implementation imageNavView
@synthesize index;
- (id)initWithFrame:(CGRect)frameRect{
self = [super initWithFrame:frameRect];
if (self) {
// Custom initialization.
self.userInteractionEnabled=YES;
self.multipleTouchEnabled=YES;
self.opaque=YES;
self.autoresizingMask=(UIViewAutoresizingFlexibleHeight|
UIViewAutoresizingFlexibleWidth|
UIViewAutoresizingFlexibleRightMargin
|UIViewAutoresizingFlexibleLeftMargin
|UIViewAutoresizingFlexibleTopMargin
|UIViewAutoresizingFlexibleBottomMargin);
index=0;
}
return self;
}
- (void)dealloc {
NSLog(@"before image dealloc %i",[self retainCount]);-------- log is 1
[super dealloc];
NSLog(@"after image dealloc %i",[self retainCount]);-------- log is 1,why itn't bad access?
}
@end
为什么第二次登录NSLog(@“图像dealloc%i”,[self retainCount]);是1,不是一个糟糕的访问,因此imageview不会被释放。 我无法理解,任何可能的方法都可以实现这一点?...任何建议都会感激不尽!谢谢!
答案 0 :(得分:0)
dealloc是一种回调方法,而系统会释放一个对象。
以下描述是dealloc的api文档,
相反,通过版本NSObject协议方法间接调用对象的dealloc方法(如果释放消息导致接收者的保留计数变为0)。
答案 1 :(得分:0)
这是一个很好的例子,说明为什么你应该
在取消分配某些内容后调用方法的行为完全未定义。在这种情况下,它可能会崩溃,也可能不会崩溃。如果你打开僵尸检测,它肯定会崩溃。
由于retainCount
绝对没有办法返回0,因此没有理由将对象重新分配减少到保留计数。