我正在使用ARC,我的代码如下:
-(void)viewAllCustomer:(id)sender
{
if([self.popOver isPopoverVisible])
{
[self.popOver dismissPopoverAnimated:YES];
}
CustomersViewController *allCustomer=[[CustomersViewController alloc]init];
[allCustomer setDelegateAction:self];
[allCustomer.view setFrame:CGRectMake(0, 0, 370, 420)];
UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:allCustomer];
UIPopoverController *_popOver=[[UIPopoverController alloc]initWithContentViewController:navController];
[_popOver setPassthroughViews:[NSArray arrayWithObject:self]];
[_popOver setPopoverContentSize:CGSizeMake(370, 420)];
UIButton *button=(UIButton *)sender;
// 60.0, 54.0
CGRect buttonFrame=CGRectMake(button.frame.origin.x+25, button.frame.origin.y+35, 10,10);
[_popOver presentPopoverFromRect:buttonFrame inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
self.popOver=_popOver;//popOver is (nonatomic,retain)
}
我得到内存泄漏:
感谢。
答案 0 :(得分:1)
我自己必须回答这个问题,感谢@ abizern。实际上泄漏是由于_var._var只是实例变量的一个不同名称(大概是你不小心直接访问它的时候)意思是使用访问器)。在提供给我的代码中意外地将_var分配给self.var。 我只是制作了@property(非原子,保留)并在实现文件中将它用作self.var。没有更多的内存泄漏。而且arc属性也是自动合成的,因此不再需要显式删除@synthesise。
在浏览开发者apple时发现this: 在这个例子中,很明显myString是一个局部变量,而_someString是一个实例变量。
通常,即使您从自己的实现中访问对象的属性,也应该使用访问器方法或点语法进行属性访问,在这种情况下,您应该使用self:
- (void)someMethod {
NSString *myString = @"An interesting string";//my bad was that i have taken _myString
self.someString = myString;//again self.someString = _myString //wrong
//或[self setSomeString:myString]; }