美文网首页iOS开发将来跳槽用
#import 跟#include、@class有什么区别?#i

#import 跟#include、@class有什么区别?#i

作者: iOS_Alex | 来源:发表于2016-08-08 14:02 被阅读126次

    (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有什么区别?#i

        本文链接:https://www.haomeiwen.com/subject/mllrsttx.html