Run*_*oop 4 cocoa cocoa-touch objective-c
关于Objective C中属性的语法和用法,我有几个基本问题:
假设标题中包含以下声明:
@interface TestObject : NSObject {
NSArray *myArray;
}
@property (nonatomic, retain) NSArray *myArray;
Run Code Online (Sandbox Code Playgroud)
在实施中,我可以:
myArray和self.myArray互换用于设置和获取目的?self.myArray = nil相当于[myArray release]?self.myArray = nil而不是[myArray release]?myArray而self.myArray实际上是不同的.myArray正在直接访问变量,而self.myArray(相当于[self myArray])正在调用一个访问器方法.大多数人都同意你应该一直使用self.myArray(或[self myArray]),而不是myArray直接使用.这是因为访问者可能有副作用; 例如,如果直接设置变量,KVO将无法工作,并且不会为您处理内存管理.
您的属性声明为retain,所以self.myArray = anArray([self setMyArray:anArray]与以下内容相同)执行以下操作:
因此,当您这样做时self.myArray = nil,其中一个步骤(#2)确实会释放旧数组.(而且由于新版本nil,我们不必担心它的内存管理,即使我们保留它.)所以是的,self.myArray = nil是一种有效的发布方式myArray.
但是,如果你在谈论释放myArray的dealloc,它通常是用一个好主意[myArray release],因为调用self.myArray = nil都会有副作用,如果任何其它目的是观察myArray通过志愿.因此,尽管它不遵循内存管理的标准,它不是写你一个好主意dealloc的使用方法self.myArray = nil.
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |