iPhone SDK UIBarButton内存泄漏
我一直在写一篇很好用的文章,但是我用仪器测试它是否有泄漏,并且遇到了来自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
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,您将有内存泄漏。