城阳网站建设哪家好,那个网站推作者,php靓号网站源码,wordpress 下载远程图文章目录 1. #import 跟#include 又什么区别#xff0c;class呢, #import 跟 #import””又什么区别?2. 属性关键字assign、retain、weak、copy3. strong和weak关键字有什么区别4. 什么情况下使用weak关键字#xff1f;相比于assign有什么不同#xff1f;5. atomic… 文章目录 1. #import 跟#include 又什么区别class呢, #import 跟 #import””又什么区别?2. 属性关键字assign、retain、weak、copy3. strong和weak关键字有什么区别4. 什么情况下使用weak关键字相比于assign有什么不同5. atomic(原子性)和nonatomic(非原子性)区别 1. #import 跟#include 又什么区别class呢, #import 跟 #import””又什么区别?
#import是Objective-C导入头文件的关键字 #include是C/C导入头文件的关键字, 使用#import头文件会自动只导入一次不会重复导入相当于#include和#pragma once; class告诉编译器某个类的声明当执行时才去查看类的实现文件可以解决头文件的相互包含、循环引用问题; #import用来包含系统的头文件#import””用来包含用户头文件。
2. 属性关键字assign、retain、weak、copy
assign用于基本数据类型和结构体。如果修饰对象的话当销毁时属性值不会自动置nil可能造成野指针。 weak用来修饰OC对象。对象引用计数为0时属性值也会自动置nil retain强引用类型ARC下相当于strong但block不能用retain修饰因为等同于assign不安全。 strong强引用类型修饰block时相当于copy。
copy
block 是在栈区分配内存由系统管理使用copy拷贝到堆区 避免被释放NSString NSArray NSDictionary 存在对应的可变类型 可变字符串 copy - 不可变字符串
3. strong和weak关键字有什么区别
针对于对象的strong是强指针持有对象的所有权weak是弱指针不持有对象所有权
4. 什么情况下使用weak关键字相比于assign有什么不同
委托 为了规避循环引用使用weak限定delegate 指针StoryBoard Xib 拖拽控件可以使用weak关键字限定属性
与assign的区别
weak只能修饰对象指针assign可以修饰任意类型的指针weak指针指向的对象如果被释放weak指针自动置为nilassgin不会自动置为nil
基本数据类型用weak来修饰 Xcode会直接提示错误信息如下
Property with weak attribute must be of object type对象使用assign来修饰 编译没有问题运行也没有问题。 weak修饰的对象当对象释放后即引用计数为0时对象会置为nil 复制代码而向nil发送消息是没有问题的不会崩溃。 assign修饰的对象当对象释放之后即引用计数为0时对象会变为野指针不知道指向哪再向对象发消息非常容易崩溃。
5. atomic(原子性)和nonatomic(非原子性)区别
(1) atomic:提供线程安全是防止在写未完成的时候被另一个线程读取造成数据错误即阻止两个线程同时更新一个值。 (2) non-atomic:在自己管理的内存环境中解析的访问器保留并自动释放返回的值如果指定了nonatomic,那么访问器只是简单的返回这个值。