对象实例变量及属性(Object Instance Variables and Properties)

  • 对象属性:指针,指向某个单一的,代表某个值的对象,如NSString对象保存,如NSString对象或NSDate对象。又如,可以将员工的姓用NSString对象保存。也就是说,为了保存员工的姓,BNREmployee实例可以有一个相应的实例变量,该变量是一个指向NSString实例的指针。我们推荐你每次都声明属性,这样就不需要自己创建存取方法。
  • 一对一关系:指针,指向单个复杂的对象,例如,员工可能会有配偶。因此,BNREmployee实例可以有一个相应的实例变量,该变量是一个指向BNRPerson实例的指针。再次,我们推荐你每次都声明属性,这样就不需要自己创建存取方法。
  • 一对多关系:指针,指向某个collection类的实例,如NSMutableArray实例。例如,员工可能会有小孩。因此,BNREmployee实例可以有一个相应的实例变量,该变量是一个指向NSMutableArray实例的指针。这个NSMutableArray实例可以保存一组指针,指向一个或多个BNRPerson。一对多关系比对象属性及一对一关系复杂,需要自己穿件实例变量,存取方法及从关系中增加或一出对象的方法。

 

对象所有权与ARC(Object ownership and ARC)

与" 包含其他对象相比"相比,这种指向其他对象的特性会产生两大副作用:

  • 单个对象可能会扮演多个角色。例如,BNREmployee对象的spouse(配偶)可能还会被设置为多个child(孩子)的contact(紧急联系人)
  • 导致产生大量独立的对象,耗尽程序的可用内存。因此,需要保留正在使用的对象,并释放那些不用的对象(将其占用的内存还给堆),让系统能够重用这些对象所占用的内存。

 

  为了解决上述问题,Object-C提出了对象所有权(object ownership)概念。当某个对象(A)拥有某个对象实例变量(B)时,称A拥有B指向的对象。

  具体见(p153);

 

@class 的使用说明:

  注意@class BNRAsset;这行代码。当编译器在处理BNREmployee.h时,会遇到BNRAsset类。如果编译器不知道它,就会报错。

  @class BNRAsset;这行代码的作用时告诉编译器,程序有一个名为BNRAsset的类。

  当使用@class而不是#import时,编译器不会查看文件的全部内容,因此处理速度更快。之所以能够在 BNREmployee.h及其他头文件中使用@class,是因为编译器不需要知道实现细节就能处理文件中的所有声明。

 

转载于:https://www.cnblogs.com/jerry-q1/articles/5309065.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值