-2

我是 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];
}
4

1 回答 1

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),当它通过-style 设置器时dealloc,您将使用它[_thing release]来对抗发送到对象的对象。在访问器中不调用访问器的原因应该是显而易见的。我们不使用访问器来防止不必要的影响。retainretaindealloc

编辑:这里有一些很好的资源可以帮助您更好地理解手动引用计数。

  1. 使用 Cocoa 和 Objective-C 理解引用计数
  2. 内存管理编程指南(来自 Apple)

另外,如果你想为 iOS 开发考虑使用 ARC。ARC 代表自动引用计数。与您显式添加retainrelease调用代码的 MRC(手动引用计数)不同,ARC 保守地为您处理引用计数,保留和释放它认为合适的对象。您可以在下面阅读有关 ARC 的信息。

  1. 过渡到 ARC(来自 Apple)
于 2013-02-05T07:43:17.770 回答