Object-C-@class关键字和@property参数

来源:互联网 发布:js访问函数内部变量 编辑:程序博客网 时间:2024/06/11 14:31

1:@class关键字

   定义:@class className

  作用:声明定义一个类

  使用:(新建一个Book类,在新建一个Student类,student类中有Book属性,我们可以使用@class Book声明一个Book类)

              

   (在student的实现类中实现setBook方法,因为在setBook中使用到了book类的 relase和retain方法,所以需要import book.h

               

       看上面的两段代码很容易可以看明白@class其实和Import的功能是一样的效果,如果在Student.h中不声明book,在@property Book ×book时将找不到book类。当然你可以使用import来导入book.h头文件,这样的确可以使用,但是有时候使用@class却是更加方便,快速

      看看@class和import有什么区别:

1:@class 不会把整个.h文件导入到类中,而import则是copy整个文件内容。
2:@class只时声明定义该类,但是具体类中做了
什么操作引用该类的类不会管。
3:当有非常多个类同时引用一个类时,如果很多类都是用import导入,当该类变动时,导入该类的类也会重新被编译,耗费
   
资源。
4:当两个类相互使用import引用对方时编译出错,而使用@class则不会。

经过以上比较,个人觉得在***.h中药引用某个类,就是用@class声明就可以了,而在****.m类实现文件中在使用import导入要使用的类,因为在该类实现文件中可能会使用到import进来类中的方法。


2:@property参数

在前面有讲到,其实property就是用来定义类成员变量的,使用该修饰符定义成员变量,系统将自动生成get和set方法。

        其实@property这个是可以带参数的,格式为  @property (参数,参数) 类型  变量名称;

常用参数:

2.1:retain,用法 @property (retain) 类型  变量名称,意思是系统会自动帮我们释放该数据的内存,不需要我们管理。

2.2:assign,用法 @property (assign) 类型  变量名称,这个是默认的修饰符,可以不写。

2.3:readonly,用法 @property (readonly) 类型  变量名称,这个表示该数据类型系统只会生成get×××()的方法。

2.4:readwrite 用法 @property (readwrite) 类型  变量名称,这个表示该数据类型系统会自动生成get和set方法。

2.5:atomic ,用法 @property (atomic) 类型  变量名称,这个表示数据访问实现是线程安全的,同一时间只能一个线程访问。

2.6:nonatomic,用法 @property (nonatomic) 类型  变量名称,这个表示非线程安全,在ios中可能经常是用这个。

2.7:getter = isRich,用法@property (getter = isRich) 类型  变量名称,指定访问数据的get方法名称,一半用于bool类型数据。

具体代码如:

       

0 0