IPHONE UIIMAGEVIEW无法发布?

时间:2011-01-22 14:56:58

标签: iphone objective-c uiimageview release

伙计们。我是iphone的新手。 我遇到了一个问题.uiimageview无法发布......这是代码。

    #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不会被释放。 我无法理解,任何可能的方法都可以实现这一点?...任何建议都会感激不尽!谢谢!

2 个答案:

答案 0 :(得分:0)

dealloc是一种回调方法,而系统会释放一个对象。

以下描述是dealloc的api文档,

相反,通过版本NSObject协议方法间接调用对象的dealloc方法(如果释放消息导致接收者的保留计数变为0)。

答案 1 :(得分:0)

这是一个很好的例子,说明为什么你应该

从不调用retainCount

。对象的绝对保留计数是一个实现细节,它通常是一个没有意义的值。

在取消分配某些内容后调用方法的行为完全未定义。在这种情况下,它可能会崩溃,也可能不会崩溃。如果你打开僵尸检测,它肯定会崩溃。

由于retainCount绝对没有办法返回0,因此没有理由将对象重新分配减少到保留计数。