关于实例变量和属性——之二

使用instancetype指定返回类型,

明确它和id之间的区别,

isntancetype 指定的是和init初始化的对象(self)相同类型的对象,

而id指定的是任意类型的对象.

关于实例变量和属性——之二

  不管在实现文件中显式声明的实例变量,或者是使用@synthesize隐式生成的实例变量,它们都是私有的。子类中无法通过实例变量名称直接访问实例变量,只能通过从父类继承的accessor访问。

  @synthesize方法可能会进行额外的工作,比如内存管理,复制值等,而这些工作在直接对实例变量进行读写操作时不会发生。

  故在属性和实例变量之间还有一个抽象层,这一层让系统有机会来做一些额外工作(只有当需要访问实例变量的时候才进行的,可以理解为:对实例变量指向的空间进行分配并初始化等工作,所以不需要对这一层深究)。

  简单来说,不需要人为指定@synthesize指令,编译器会为用户声明的属性自动生成实例变量以及访问方法(accessor),自动生成的访问方法命名规则如下:

  • getter方法:和属性名相同。
  • setter方法:属性名前加set,如firstName,则生成setFirstName。
  • 实例变量(instance Variable):属性名前加下划线,如_firstName。

      实例变量直接可以在实现文件中访问,也可以通过属性名访问:

_firstName = @"王二狗";
self.firstName = @"王二狗";

你可能感兴趣的:(实例)