美文网首页
iOS开发OC属性关键字

iOS开发OC属性关键字

作者: 心成则玲 | 来源:发表于2022-04-26 16:03 被阅读0次

内存管理常用几种:assign、strong、weak、copy
assign适用于基本数据类型,weak适用于NSObject对象,并且是一个弱引用
strong
strong是每对这个属性引用一次,retainCount就会+1,只能修饰NSObject对象,不能修饰基本数据类型。是id和对象的默认修饰符。如:

@property (nonatomic, strong) UIButton *button; // 按钮
@property (nonatomic, strong) NSString *string; // 字符串

weak
weak对属性引用时,retainCount不变,只能修饰NSObject对象,不能修饰基本数据类型。主要用于避免循环用,如:

@property (nonatomic,weak) id<MyDelegate> delegate;

assin
assin可以修饰基本数据类型和NSObject对象,对这个关键字声明的属性操作时,retainCount是一直不变的,一直为1,只有主动调用release时,才会释放,如:

@property (nonatomic, assign) Bool isBool; // 布尔值
@property (nonatomic, assign) NSInteger interger;

copy
copy复制的意思,这个关键字类似strong,只能修饰NSObject对象,不能修饰基本数据类型。和strong不一样的地方时,copy后的对象,指针地址和之前不一样了,也就是说重新分配的一块内存,也就是所谓的深拷贝,这个关键字在用的时候,因为涉及到申请的内存空间,所以要少用,能用strong的地方都用strong,只有必须用copy才用copy,如:

@property (nonatomic, copy) NSString *str; // 字符串
@property (nonatomic, copy) MyBlock myBlock; // Block

block在没有使用外部变量时,内存存在全局区,然而,当block在使用外部变量的时候,内存是存在于栈区,当block copy之后,是存在堆区的。存在于栈区的特点是对象随时有可能被销毁,一旦销毁在调用的时候,就会造成系统的奔溃,所以blcok要用copy关键字。
atomic和nonatomic的区别
在平时创建对象@property的时候,我们会有用到atomic和nonatomic,但两者的区别在哪里
atomic

1 是默认的
2 对同一对象的set和get的操作时循序执行的
3 速度不快,因为要保证操作整体完成
4 线程安全,需要消耗大量系统资源来为属性加锁

使用atomic并不能保证绝对的线程安全,对于要绝对保证线程安全的操作,还需要使用更高级的方式来处理,比如NSSpinLock、@syncronized等
nonatomic

1 不是默认的
2 更快
3 如有两个线程访问同一个属性,会出现无法预料的结果
4 非线程安全,适合内存较小的移动设备
5 在不添加atomic或nonatomic的情况下,默认的是atomic

atomic修饰的属性,系统生成的getter/setter会保证get、set操作的完整性,不受其他线程影响。比如,线程A的getter方法运行到一半,线程B调用了setter,那么线程A的getter还是能得到一个完好无损的对象。
nonatomic修饰的属性,不做保持getter完整性保证,但在运行速度上要比atomic快

相关文章

  • iOS属性关键字

    iOS属性关键字 引言 学习 iOS 开发的人,大多都绕不开属性关键字—— assign,weak,unsafe_...

  • iOS开发OC属性关键字

    内存管理常用几种:assign、strong、weak、copyassign适用于基本数据类型,weak适用于NS...

  • iOS开发---属性关键字详解

    iOS开发—属性关键字详解 @Property 什么是属性? 属性(property)是Objective-C的一...

  • OC常见关键字

    转载自:iOS开发——OC篇&常用关键字的使用与区别 copy,assign,strong,retain,weak...

  • iOS 内存管理(3)-属性词基本讲解

    引言 学习 iOS 开发的人,大多都绕不开属性关键字—— assign,weak,unsafe_unretaine...

  • 存储类型和一些关键字

    参考:C Storage ClassesiOS定义静态变量、静态常量、全局变量iOS开发——OC篇&常用关键字的使...

  • iOS-归纳

    iOS内存分区,堆区 栈区等 内存管理 属性关键字、内存分区总结 iOS- 数据存储iOS开发数据库-FMDBiO...

  • Swift dynamic关键字

    如果您有过OC的开发经验,那一定会对OC中@dynamic关键字比较熟悉,它告诉编译器不要为属性合成getter和...

  • Objective-C 之内存管理高级

    一. 属性的属性 注: OC在Mac系统开发时,支持垃圾回收机制,然而在iOS开发时,仅支持引用计数.不支持垃圾回...

  • Swift 属性 原子性

    问题: OC开发中,属性的申明都会有一个关键字 atomic nonatomic, 但在Swift中,几乎没看见过...

网友评论

      本文标题:iOS开发OC属性关键字

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