首页 > 代码库 > 盘点iOS开发中property属性常用关键字

盘点iOS开发中property属性常用关键字

一、关键字说明

1、@synthesize:自动生成成员变量相应的存取方法,可以使用点语法操作该变量的存取。

2、@implementation:  表明类的实现  ,以@end 结束。

3、self  :类似java语言当中的this ,是隐藏指针  指向接受消息的对象的指针 。消息所调用的方法使用该指针参数查找它要使用的实例。

4、super : 调用父类的方法 。    self = [ super init];  判断是否可以成功初始化 如果父类成功初始化 那么将会赋值给 self  ,这样self 是一个非空对象。 它不是参数也不是实例变量, 向super 发生消息的时候,实际上是在请求oc向该类的超类 发送请求 ,如果超类中没有定义的消息,oc将按照继承的普通规则在继承链中进行查找。

 

    继承当中隐藏指针isa  与  super关键字 两张图片来演示:

 

 

 

5、#imoprt  与c语言当中的#include有类似的作用 ,告诉预处理器将头文件的内容包含到本文件的.oc中 ,并且保证头文件只会被包含一次 。

 

6、@interface   声明包含一个 XXX 类 ,与@implementation 一样 ,以@end结束。

7、: 表示继承  后面跟的是父类 。oc是单继承的机制  ,这里跟出c++是不一样的。

8、@property  关键字   设置成员变量的属性 (读/写    赋值 assign retain copy  ,支持多线程的非原子访问nonatomic)

 

二、 方法的声明

  1、 声明一个方法 格式是:

    -(返回值)方法关键字 1 :(参数类型)参数名 方法关键字2 :(参数类型)参数名 ……  (在读方法的时候 ,找方法关键字来确定参数)

  2、-号是实例方法 +号是类方法

  3、另一个初始化的方法中 调用 已有的初始化方法  这种方法被称为是 Designated initializer

 

三、输出流

    NSlog是OC中的标准输出 ,附加输出 当时的时间 应用程序的名称 ,使用Nslog()输出任意对象的值时  都会使用%@格式说明 ,在使用这个说明符时  对象通过调用一个名为description的方法提供自己的NSlog()格式

 

 

四、getter / settter 方法

  对象.属性:使用@property配合@synthesize  可以让编译器自动实现 getter/setter方法 ,很方便  可以直接使用”对象 属性“的方法调用

  对象.方法:如果想要调用”对象.方法“的方式来调用一个方法并获取到方法的返回值  需要使用@property配合@dynamic  使用@dynamic 关键字是告诉编译器由我们自己来实现访问方法 。

 

五、属性的设置

  1、readonly 此标记说明属性是只读的 ,默认的标记是读写 ,如果指定了制度 在@implementation中只需要一个读取器  或者你使用@synthesize关键字 ,也是有读取器方法被解析 而且如果试图使用点操作符 为 属性赋值 ,那么将会出现编译错误。

 

  2、readwrite 此标记说明属性会被当成读写的  这也是默认的属性  设置器和读取器都需要在@implementation中实现 ,如果使用@synthesize关键字 读取器和设置器都会被解析

 

  3、nonatomic 非原子性访问 对于属性赋值的时候不加锁 ,多线程并发访问会提高性能,如果不加此属性 则默认是两个访问方法都为原子型事务访问。

 

  4、atomic 和 nonatomic用来决定编译器生成的getter和setter是否为原子操作 ,atomic 设置成员变量的@property属性时  默认为是atomic 提供线程安全 。在多线程环境下 ,原子操作是必要的 否则会引起错误的结果 。加了 atomic,setter函数会变成下面这样:

 

 

        {lock}

        if(property != newValue){

          [property release];

          property = [newValue retain];

        }

        {unlock}

    nonatomic 禁止多线程,变量保护 提高性能 。atomic 是OC 使用的一种线程保护技术 ,基本上来讲 就是防止在  写   未完成的时候  被另外一个线程读取 ,造成数据错误。而这种机制是耗费系统资源的 ,所以在iPhone这种小型设备上  如果没有使用多线程间的通讯编程  那么 nonatomic是一个非常好的 选择。      访问器是原子操作 ,这也就是说 在多线程环境下,解析的访问器提供一个对属性的安全访问 ,从获取器得到的返回值或者通过设置器设置的值可以一次完成,  即便是别的线程也正在对其进行访问。