Objective c 什么时候使用Self?
我是iOS开发新手 我有如下财产:Objective c 什么时候使用Self?,objective-c,cocoa-touch,self,Objective C,Cocoa Touch,Self,我是iOS开发新手 我有如下财产: @property(nonatomic,retain)NSMutableArray *dataArray; 我正在做下面的事情,来分配它 self.dataArray=[[NSMutable alloc]init]; 在dealloc中,我将执行以下操作 -(void)delloc{ [dataArray release]; [super dealloc]; } 但是我的数组初始化出现内存泄漏。但是,它不会创建 当我不使用self时泄漏。但我想知
@property(nonatomic,retain)NSMutableArray *dataArray;
我正在做下面的事情,来分配它
self.dataArray=[[NSMutable alloc]init];
在dealloc中,我将执行以下操作
-(void)delloc{
[dataArray release];
[super dealloc];
}
但是我的数组初始化出现内存泄漏。但是,它不会创建
当我不使用self时泄漏。但我想知道初始化数组是一种写方法吗
不使用自我。感谢您的帮助 因为dataArray属性是用retain声明的,这意味着当您使用self(因此使用setter)时,retain计数会增加到2,并且只释放一次。另一方面,如果只使用ivar,则保留计数为1(因为alloc),并且释放它一次,这很好。为了在第一种情况下避免内存泄漏,请像这样自动释放它 self.data=[[NSMutableArray alloc]init]autorelease] 这将平衡保留计数。至于访问,除了dealoc方法内部,尝试使用self(setter和getter) 您应该阅读内存管理文档,这是为Cocoa Touch开发时首先要做的事情
另外,如果您使用的是通过自动生成/自定义getter/setter访问对象的
self.
签名,为什么不使用ARC?。setter将专门管理内存,您不需要这样做。
如果不使用self,则可以直接访问对象
您显示的代码正在泄漏,因为dataArray
的默认setter将保留到数组中,即您使用self.dataArray=[[NSMutableArray alloc]init]设置的值代码>
正确的用法是:
self.dataArray = [[[NSMutableArray alloc] init] autorelease];
或:
这里发生的事情是alloc
正在将一个添加到新对象的retain计数中。属性引用也将保留该对象。如果你想这样做,你只需要其中一个。常用的方法是:
self.dataArray = [[[NSMutableArray alloc]init] autorelease];
但是,更好的方法是按照@c.cam108的建议使用ARC,避免整个问题。除非您需要支持iOS 3,否则我建议您切换到ARC-它将(大部分)为您节省内存管理的痛苦。至于您的问题,初始化时您正在访问属性,但释放时您正在访问关联的iVar。尝试遵守一种约定或另一种约定。当您使用MRC
时,此约定在-dealoc
方法中更为正确:[self.dataArray release]
或[\u dataArray release]
请注意,没有这样的对象NSMutable
(直到您不创建一个),因此在您的情况下,我认为正确的代码是self.dataArray=[[nsmutablerarray alloc]init]代码>标题与内容不匹配,我强烈建议您也使用ARC,但无论如何,我建议您阅读一本“beggining objC book”(无意冒犯,但这是基本常识,不是具体问题)
self.dataArray = [[[NSMutableArray alloc]init] autorelease];