我是iOS的新手,所以试图理解内存管理。
我有一个.h文件,其中包含一个属性,我想在某个函数中使用该var。
@property (nonatomic, retain) NSMutableArray *myArray;
然后在我的.m文件中我有一些函数x。
-(void) x
{
// How to allocate memory to the property variable ??
_myArray = [NSMutableArray alloc]init];
OR
myArray= [[NSMutableAraay alloc]init]
// what is the utility of "_" here ?
}
以及如何在这种情况下管理内存,因为我们在.h文件中已经使用了关键字 Retain
,并且还在func x中分配了内存,然后如何进行内存管理。
在dealloc方法
-(void)dealloc
{
[myArray release];
OR
[_myArray release];
// same here whats the difference B/W 2.?
[super dealloc];
}
答案 0 :(得分:0)
使用@property
和@synthesize
创建两个方法,称为访问器,用于设置和获取后备实例变量。通过常规方法调用或点表示法(self.propertyname
)调用访问器。访问器提供了执行内存管理或其他任务的位置,可以通过使用@synthesized
/ nonatomic
/等在copy
访问者中控制到一定程度。您仍然可以使用实例变量的名称而不是self.propertyName
直接访问属性掩码的实例变量。默认情况下,实例变量的名称是以下划线开头的属性名称。下划线可防止人们在不意味着并且可以防止命名空间冲突时意外地直接访问实例变量。您也可以实现自己的访问者。
self.myArray //goes through the setter/getter of the property
_myArray //directly accesses backing instance variable while ignoring accessors
myArray //incorrect
请注意,可以使用@synthesize myPropertyName = myCoolName
更改支持实例变量的名称。
就使用而言,在大多数情况下,您会使用self.thing
。例外情况是自定义设置者/获取者(例如return _thing
)和dealloc
,您可以使用[_thing release]
来对抗通过时发送给对象的retain
retain
- 风格的二传手。不在访问者中调用访问者的原因应该是显而易见的。我们不使用dealloc
中的访问者来防止不必要的影响。
编辑:这里有一些很好的资源可以帮助您更好地理解手动引用计数。
另外,如果您想为iOS开发,请考虑使用ARC。 ARC代表自动参考计数。与您明确向代码添加retain
和release
调用的MRC(手动引用计数)不同,ARC保守地为您处理引用计数,保留并释放它认为合适的对象。您可以在下面阅读ARC。