#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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (1)#import指令是Object-C针对@include的改进版本,能确保引用的文件只会被引用一次,不会陷入...
    路途迷茫阅读 4,300评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,068评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,006评论 18 399
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,879评论 0 9
  • 我们时刻准备着 只要靠向一道岸 就立即告别 不用热烈的拥抱 没有哀伤的对白 只轻轻地 用手挥舞着盛宴后的半截青春 ...
    柴小扉阅读 3,385评论 4 8

友情链接更多精彩内容