修饰符

作者: esther9502 | 来源:发表于2018-09-06 21:08 被阅读1次

对一些修饰符进行整理

1.atomic原子操作,提供多线程安全,setter方法会发生变化;

基本来讲是防止在写未完成的时候被另外一个线程读取,造成数据错误,但是这种操作的弊端就是非常消耗内存资源,苹果手机的内存资源相当宝贵,所以没有使用多线程间的通讯编程,一般使用nonatomic。

2.如果没有指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单的返回这个值而不会释放。

assign、retain、copy

NSString * house = [[NSString alloc] initWithFormat:@"The house is mine"];

首先在堆上分配一段内存来存储@"The house is mine", 假设内存地址为:0X000 内容则为:@"The house is mine"

然后在栈上分配一段内存存储house,假设地址为0XFFFF,内容就是0X0000。

(堆上放string的值【the house is mine】,栈上存堆上存的string值的内存地址)

1、assign:

NSString * myHouse = [house assign];

此时house和myHouse完全相同,地址都为0XFFFF,内容为0X0000,也就是说myHouse只是house的一个别名,对任何一个操作就等于对另一个操作,因此retainCount不需要增加。

2、retain:

NSString * myHouse = [house retain];

House的一切都没变,只是多了一个myhouse来存house的地址

此时myHouse的地址不再是0XFFFF,可能是0XEEEE,但内容为0X0000,所以说house和myHouse都可以管理"The house is mine"所在的内存,因此retainCount需要增加1,

3、copy:

NSString * myHouse = [house copy];

此时会在堆上重新开辟一段内存存放@"The house is mine",假设内存地址为:0X1111,内容则为:@"The house is mine"

同时会在栈上为myHouse分配内存,假设地址为:0XBBBB,内容为:0X1111,也就是说myHouse是一个新的对象,与house没有任何关系,很明显,retainCount增加1,

strong与weak

ARC 是编译器特性,ARC 的规则非常简单:只要还有一个变量指向对象,对象就会保持在内存中。当指针指向新值,或者指针不再存在时,相关联的对象就会自动释放。这条规则对于实例变量、synthesize属性、局部变量都是适用的。OC不同于Java的地方就是没有垃圾回收机制,在内存管理这块,cocoa引入了一种称为引用计数(reference counting)的技术,有时也叫保留计数,每个对象有一个与之对关联的整数,称作它的引用计数器或保留计数器.当某段代码要访问一个对象的时候,该代码将该对象的保留计数值加1,表示”我要访问该对象”,当这段代码结束对象访问时,将对象的保留计数值减1,表示它不再访问该对象,当保留计数值为0时,表示不再有代码访问对象了,对象被销毁,其占用的内存被系统回收

相关文章

  • vue 常见修饰符

    表单修饰符 事件修饰符 鼠标修饰符 键盘修饰符

  • 谈谈 OC 属性修饰符的本质是什么!

    属性修饰符的本质 assign 修饰符 copy 修饰符 atomic 修饰符 strong 修饰符 weak 修...

  • Kotlin 关键字、修饰符、操作符

    Kotlin中的修饰符关键字分类 类修饰符 成员修饰符 访问权限修饰符 协变逆变修饰符 函数修饰符 属性修饰符 参...

  • Vue修饰符

    事件修饰符 .prevent修饰符 .stop修饰符 .once修饰符 prevent修饰符 用于阻止默认事件行为...

  • 【转】vue修饰符

    目录 表单修饰符 事件修饰符 鼠标按键修饰符 键值修饰符 v-bind修饰符(实在不知道叫啥名字) 一、表单修饰符...

  • Vue这些修饰符帮我节省20%的开发时间

    目录 表单修饰符事件修饰符鼠标按键修饰符键值修饰符v-bind修饰符(实在不知道叫啥名字) 表单修饰符 填写表单,...

  • vue 修饰符

    v-model 修饰符 .lazy.number.trim .sync 修饰符 .native修饰符 事件修饰符 ...

  • Java 修饰符

    Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类、方...

  • 日常记忆Java修饰符

    Java修饰符 Java语言提供的很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符修饰符用来定义类、方法或...

  • java学习笔记第二天

    java修饰符 java修饰符 java语言提供了很多修饰符,主要分为下面两类: 1.访问修饰符 2.非访问修饰符...

网友评论

    本文标题:修饰符

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