访问对象的实例变量的方式属于对象功能范畴。在对象内部,对象的任何实例方法都可以访问该对象的实例变量。通过外部类实例直接访问对象的实例变量属于变量功能范畴。Objective-C拥有多条编译器指令,专门用于设置实例变量的作用范围(即访问控制)。
@private:将实例变量设置为只能在声明它的类以及与该类类型相同的其他实例中访问。
@protected:将实例变量设置为只能在声明它的类以及其子类的实例方法中被访问。在没有明确设置实例变量的访问控制等级时,这是实例变量默认的作用范畴。
@public:将实例变量设置为可以被任何代码访问
@package:将实例变量设置为可以被其他类实例和函数访问,但是在其所属程序包的外部,它会被视为私有变量。这种作用范围可以用于库或框架类。
属性与实例变量的区别是:属性无法直接访问对象的内部状态,但提供了访问这类数据的方便机制(即读取和设置方法),因而可以含有其他逻辑。通过Objective-C的自动声明属性,编译器能够根据你提供的规范自动生成这些方法。这就减少了编写和维护代码的工作量,并能增加程序的一直性和可靠性。
属性声明:使用关键字@property (特性)属性的类型 属性的名称;
属性的特性
nonatomic 原子性 使用该特性可以在多线程并发的情况中,将访问器设置为非原子性的,因而能够提供不同的结果。如果不设置该特性,访问器就会拥有原子性,换言之,复制和返回结果永远都会完全同步
assign 设置器语义 通过该特性可以在不适用copy和retain特性的情况下,使属性的设置器方法执行简单的赋值操作。这个特性是默认设置。
retain 设置器语义 在赋值时,输入值会被发送一条保留信息,而上一个值会被发送一条释放消息。
copy 设置器语义 在赋值时,输入值会被发送一条新消息的副本,而上一个值会被发送一条释放消息。
strong 设置器语义 当属性使用ARC内存管理功能时,该特性等同于retain特性
weak 设置器语义 当属性使用ARC内存管理功能时,该特性的作用与assign特性类似,但如果引用对象被释放了,属性的值就会被设置为nil
readwrite 可读写性 使用该特性时,属性可以被读取也可以被写入,而且必须实现getter和setter方法。这个特性是默认设置
read-only 可读写性 使用这个特性时,会将属性设置为只读。必须实现getter方法
getter=getterName 方法名称 将getter方法重命名为新读器的名称
setter = setter 方法名称 将setter方法重命名为新设置器的名称
网友评论