Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone中分配的对象的潜在泄漏_Iphone - Fatal编程技术网

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的人,戴夫