基本问题是Objective-C属性语法

基本问题是Objective-C属性语法,第1张

概述关于Objective C中属性语法和用法,我有几个基本问​​题: 假设标题中包含以下声明: @interface TestObject : NSObject { NSArray *myArray;}@property (nonatomic, retain) NSArray *myArray; 在实施中,我可以: >列表项目 >交替使用myArray和self.myArray进行 关于Objective C中属性的语法和用法,我有几个基本问​​题:

假设标题中包含以下声明:

@interface TestObject : NSObject {    NSArray *myArray;}@property (nonatomic,retain) NSArray *myArray;

在实施中,我可以:

>列表项目
>交替使用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]相同)执行以下 *** 作:

>保留anArray,很快就会成为新的myArray.
>释放旧的myArray,很快就不再是myArray了.
>更改指针myArray,使它现在指向anArray.

因此,当你执行self.myArray = nil时,其中一个步骤(#2)确实会释放旧数组. (并且由于新的是零,我们不必担心它的内存管理,即使我们保留它.)所以是的,self.myArray = nil是释放myArray的有效方式.

但是,如果您正在谈论在dealloc中释放myArray,使用[myArray release]通常是一个好主意,因为如果任何其他对象通过KVO观察myArray,则调用self.myArray = nil会产生副作用.因此,尽管它遵循内存管理标准,但使用self.myArray = nil编写dealloc方法并不是一个好主意.

总结

以上是内存溢出为你收集整理的基本问题是Objective-C属性语法全部内容,希望文章能够帮你解决基本问题是Objective-C属性语法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1003611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存