@interface:点标记,发布和dealloc的
UIImageView *myImageView;
@property (nonatomic, retain) UIImageView *myImageView;
@implementation:
@synthesize myImageView;
- (void)viewDidLoad
{
[super viewDidLoad];
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
}
什么是myImageView引用计数? 2(1从alloc,1从点表示保留)或3(1从alloc表示,1从点表示保留,1来自@property保留)
这两个语句的引用计数是否相同?
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
和
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
另外,我想你释放他们在@implemenation和dealloc方法,正确吗?
编辑:
我没有得到我想要的答案,也许我的问题是含糊不清。我明白什么是点符号,@property,@synthesize以及setter和getter如何工作。我不明白的是使用“自我”会发生什么。没有“自我”。关于保留数量。我实际上在myImageView对象上运行了retainCount方法,它确认了我的原始“自我”。 case的保留数为2(因为alloc和property保留,所以在那里使用autorelease可能是个好主意)。现在这引出另一个问题,如果我不使用autorelease,我该如何解决这个问题?在viewDidLoad中释放一次,并在dealloc中再次释放内存仍然会导致内存泄漏,对吧?
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSLog(@"retain count dot: %d", [myImageView retainCount]);
2011-05-17 10:01:14.915试验[1249:207]保留计数点:2
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSLog(@"retain count: %d", [myImageView retainCount]);
2011-05-17 10:03:14.715试验[1278:207 ]保留数:1
不要将保留计数看作绝对值;把它们想象成三角洲。即''alloc'产生一个对象w /引用计数+1“,”'self.myImageView = aView'在引用计数中加1“,''release'将保留计数减1”..... – bbum 2011-05-16 17:22:00
@bbum ,理解,但我试图把握的是直接使用财产评估员和伊娃时的差异。我仍然必须在viewDidLoad(因为我在那里分配)释放它们,并且在dealloc中再次释放它,因为它是一个retain属性。 – s2000coder 2011-05-16 18:46:57
计算你正在造成的保留并平衡每一个释放; 'alloc'是一个,通过setter对属性的赋值是另一个...所以,是的,你需要两个版本或autoreleases。这很简单,如果你保留,你必须释放。 – bbum 2011-05-16 19:25:41