IPhone UIIMAGEVIEW не может выпустить? - PullRequest
0 голосов
/ 22 января 2011

ребята. Я новичок в 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, неплохой доступ, поэтому просмотр изображений не выпускается.я не могу понять, каким-либо возможным способом можно это сделать? ... любой совет будет благодарен. Спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 22 января 2011

Это отличный пример того, почему вы не должны

никогда не вызывать retainCount

.Абсолютный счетчик сохранения объекта - это деталь реализации, и он часто будет иметь значение, которое не имеет смысла.

Поведение вызова метода после освобождения чего-либо равно полностью неопределено .В этом случае может произойти сбой, но может и нет.Если вы включите обнаружение зомби, оно определенно завершится сбоем.

Так как retainCount не может вернуть 0, нет никаких причин для освобождения объекта уменьшать счет сохранения до 0.

0 голосов
/ 22 января 2011

dealloc - это метод обратного вызова, в то время как система освобождает объект.

Следующее описание является приложением к dealloc,

Вместо этого метод dealloc объекта вызывается косвенно через выпускМетод протокола NSObject (если сообщение об освобождении приводит к тому, что счетчик сохранения получателя становится равным 0).

...