#import 跟#include、@class有什么区别?#import<> 跟 #import”"又什么区别?属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

(1)#import指令是Object-C针对@include的改进版本,能确保引用的文件只会被引用一次,不会陷入递归包含的问题中;

(2)@import与@class的区别:

#import会链入该头文件的全部信息,包括实体变量和方法等;二@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类如何定义的,暂时不用考虑。在头文件中,一般只需要知道被引用的类的名称就可以了,不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称;而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import类包含这个被引用类的头文件。

@class还可以解决循环包含的问题

(3)#import<>跟#import""的区别:

#import<>用来包含系统自带的文件,#import""用来包含自定义的文件

(4)属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

•readwrite:是可读可写特性,同时生成get方法和set方法的声明和实现(补充:默认属性,将生成不带额外参数的getter和setter方法(setterff只有一个参数))

• readonly:只读特性,只会生成get方法的声明和实现;不希望属性在类外改变

• assign:是赋值特性,set方法的实现是直接赋值,用于基本数据类型;仅设置变量时

• retain:表示持有特性,set方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

• copy:表示拷贝特性,set方法的实现是release旧值,copy新值,用于NSString、block等类型(set方法将传入的对象复制一份;需要完全一份新的变量时使用);

• nonatomic:非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic

你可能感兴趣的:(#import 跟#include、@class有什么区别?#import<> 跟 #import”"又什么区别?属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?)