iphone中分配的对象的潜在泄漏
在我的应用程序中,我使用以下代码:-iphone中分配的对象的潜在泄漏,iphone,Iphone,在我的应用程序中,我使用以下代码:- NSArray* toolbarItems = [NSArray arrayWithObjects: [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)], nil]; [toolbarItems makeObjects
NSArray* toolbarItems = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)], nil];
[toolbarItems makeObjectsPerformSelector:@selector(release)];
因此,它显示了对象的潜在泄漏。是的,这是一个潜在泄漏,因为您创建了一个您拥有的
UIBarButtonItem
(因为您调用了alloc
),但由于直接将其放入数组而丢失了对它的引用。因此,分析仪报告说是您泄漏了它
除此之外,代码很糟糕。我想不出任何有效的情况下,你会想做
[anArray makeObjectsPerformSelector:@selector(release)]代码>使用arrayWith。。。对象是自动释放的,因此不需要释放对象。当您使用[[alloc]init]样式创建对象时,确实会释放这些行,尝试拆分这些行,您将更容易看到问题。NSArray为它添加的每个对象添加一个保留计数,然后在您释放Array时释放它们—无需称之为可怕。简单地描述所提出的策略中的任何缺陷或提出改进的替代方案。我可以想到许多有效的情况,其中[anArray makeObjectsPerformSelector:@selector(release)];这很方便。也许这只是一种不同的编码风格。你可能想打一巴掌那个当时写NSViewController的人,戴夫