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 SDK UIBarButton内存泄漏_Iphone_Memory Leaks_Ios4 - Fatal编程技术网

iPhone SDK UIBarButton内存泄漏

iPhone SDK UIBarButton内存泄漏,iphone,memory-leaks,ios4,Iphone,Memory Leaks,Ios4,我一直在写一篇很好用的文章,但是我用仪器测试它是否有泄漏,并且遇到了来自UIBarButton的泄漏。这里是令人不快的内容 UIButton *searchbutton = [UIButton buttonWithType:UIButtonTypeCustom]; [searchbutton setImage:[UIImage imageNamed:@"searchbutton.png"] forState:UIControlStateNormal]; [searchbutton

我一直在写一篇很好用的文章,但是我用仪器测试它是否有泄漏,并且遇到了来自UIBarButton的泄漏。这里是令人不快的内容

     UIButton *searchbutton =  [UIButton buttonWithType:UIButtonTypeCustom];
 [searchbutton setImage:[UIImage imageNamed:@"searchbutton.png"] forState:UIControlStateNormal];
 [searchbutton addTarget:self action:@selector(search) forControlEvents:UIControlEventTouchUpInside];
 [searchbutton setFrame:CGRectMake(0, 0, 29,29)];
 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:searchbutton];
我应该在任何地方释放searchButton或self.navigationItem.RightBarButtonim吗

帮点忙就好了


干杯

您需要释放您的uibarbuttonite:

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:searchbutton] autorelease];

您需要释放您的uibarbuttonite:

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:searchbutton] autorelease];

您需要释放
uibarbuttoneim
引用您在那里拥有的alloc。

您需要释放
uibarbuttoneim
引用您在那里拥有的alloc。

无论何时您拥有alloc,您都有责任释放。如果您在最后一行之后立即发布,则不确定代码中会发生什么,如果您发现问题,可以尝试使用autorelease来代替。

无论何时分配,您都要负责发布。如果在最后一行之后立即发布,则不确定代码中会发生什么情况,如果发现问题,则可以尝试使用自动释放。

如果我发布UIBarButtonItem analyzer,则“释放”消息应发送到类“UIBarButtonItem”的实例,而不是直接发送到类“iamsung”,则不能调用UIBarButtonItem上的释放,您需要对创建的uibarbuttonite实例调用release。在创建它的方式中,您从来没有自己的指向可以访问的实例的指针。您可以使用autorelease来处理此问题,如我的回答中所示,或者您可以在单独的一行中创建自己的实例,将其分配给RightBarButtonim。如果我释放UIBarButtonim,则analyzer会说“释放”消息应发送给类“UIBarButtonim”的实例,而不是直接发送给类“iamsung”,不能对UIBarButtonItem调用release,需要对创建的UIBarButtonItem实例调用release。在创建它的方式中,您从来没有自己的指向可以访问的实例的指针。您可以使用autorelease来处理此问题,如我的回答所示,或者您可以在单独的一行中创建自己的实例,将其分配给rightBarButtonItem。@iamsmug--如果您查看rightBarButtonItem的文档,它会说:
@property(非原子,保留)UIBarButtonItem*rightBarButtonItem
,这意味着它将保留该项。因为您分配了它,您还需要释放/自动释放它,否则保留计数将为2,您将有内存泄漏。@iamsumg--如果您查看RightBarButtonim的文档,它会说:
@property(nonatomic,retain)uiBarButtonim*RightBarButtonim
,这意味着它将保留该项。因为您分配了它,所以还需要释放/自动释放它,否则保留计数将为2,您将有内存泄漏。