【问题标题】:IPHONE UIIMAGEVIEW can't release?IPHONE UIIMAGEVIEW 无法发布?
【发布时间】:2011-01-22 14:56:58
【问题描述】:

伙计们。我是 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(@"after image dealloc %i",[self retainCount]);是 1,不是一个坏访问,所以 imageview 没有被释放。 我不明白,任何可能的方式可以做到这一点?...任何建议将不胜感激。提前谢谢!

【问题讨论】:

    标签: iphone objective-c uiimageview release


    【解决方案1】:

    dealloc 是系统释放对象时的回调方法。

    以下描述为dealloc的api doc,

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

    【讨论】:

      【解决方案2】:

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

      永远不要调用retainCount

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

      在某些东西被释放后调用方法的行为是完全未定义的。在这种情况下,它可能会崩溃,也可能不会。如果你打开僵尸检测,它肯定会崩溃。

      由于retainCount 绝对不可能返回 0,因此对象释放没有理由将保留计数减少到 0。

      【讨论】:

      • 我认为编译器甚至应该在调用它时发出警告。
      猜你喜欢
      • 2014-11-09
      • 1970-01-01
      • 2012-08-07
      • 2011-01-16
      • 1970-01-01
      • 2011-07-03
      • 2010-11-17
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多