[OC] @property时,copy、strong、weak、assign的区别
@property(copy,nonatomic)NSMutableString*copyStr;
@property(strong,nonatomic)NSMutableString*strongStr;
@property(weak,nonatomic)NSMutableString*weakStr;
@property(assign,nonatomic)NSMutableString*assignStr; NSMutableString* originStr = [[NSMutableStringalloc]initWithString:@"Hello_reality"]; self.aCopyMStr = originStr;
self.strongMStr = originStr;
self.weakMStr = originStr; NSLog(@"mstrOrigin输出:%p,%@ ", originStr, originStr);
NSLog(@"aCopyMStr输出:%p,%@ ",_copyStr, _copyMStr);
NSLog(@"strongMStr输出:%p,%@ ",_strongStr, _strongStr);
NSLog(@"weakMStr输出:%p,%@ ",_weakStr, _weakStr);
NSLog(@"引用计数%@",[originStr valueForKey:@"retainCount"]); //输出结果
//2016-09-01 15:19:13.134 lbCopy[1205:87583] mstrOrigin 输出:0x7892a5e0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] aCopyMStr 输出:0x7893deb0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] strongMStr 输出:0x7892a5e0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] weakMStr 输出:0x7892a5e0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] 引用计数2
只有copy会开拓新的内存地址,来保存数据。
strong和weak的指针指向的仍然是源字符串的内存地址。
那么造成的结果就是,对源字符串的修改也会造成strongStr和weakStr的内容变化,但是对copyStr没有影响。
而strong和weak的区别在于,strong会使originStr的引用计数+1,但weak不会。
ARC之前属性构造器的关键字是retain,copy,assign,strong和weak是ARC带出来的关键字。
retain现在同strong,就是指针指向值地址,同时进行引用计数加1。
结论:copy会重新开辟新的内存来保存一份相同的数据。被赋值对象和原值修改互不影响。strong和weak虽然都指向原来数据地址,原值修改的时候storng和weak会随之变化。区别是前者会对数据地址进行引用计数+1防止原地址值被释放,但后者不会,当其他值都不在指向值地址时,值地址被释放,weak的值也就是为nil了。我们称会对数据地址增加引用计数的为强引用,不改变引用计数的为弱引用。
注:初始化和设为nil都可以将指针所指向的数据地址引用计数减少1。
[OC] @property时,copy、strong、weak、assign的区别的更多相关文章
- ios OC 关键字 copy,strong,weak,assign的区别
一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(stron ...
- ios 内存管理与property copy strong weak assign
- (void)fun{ NSString* str = [[NSString alloc] initWithString:@"string"]; NSLog(@"% ...
- ios中strong, weak, assign, copy
copy 和 strong(retain) 区别 1. http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是 ...
- 对于atomic nonatomic assign retain copy strong weak的简单理解
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作 1)atomic 设置成员变量的@property属性时,atomic是默认值,提供多线程安全 在多线程环 ...
- @property中的copy.strong.weak总结
1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" ...
- iOS中属性 (nonatomic, copy, strong, weak)的使用 By hL
以下内容来自Stackflow的详解 1.Nonatomicnonatomic is used for multi threading purposes. If we have set the non ...
- assign,copy,strong,weak,nonatomic的理解
举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一段 ...
- assign,copy,strong,weak,nonatomic的具体理解
例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一段内存 ...
- ios copy/strong/weak..使用总结
总结 关于属性的这些选项的学习,做一下总结: 所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全. NSString:通常都使用copy,以得到新的内存分配,而不只是原 ...
随机推荐
- 《剑指offer》 树的子结构
本题来自<剑指offer> 树的子结构 题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分两步走: 第一步:判断根节点,两个根节 ...
- Linux系统下inode满了导致无法写文件的解决思路
解决思路1:删除无用的临时文件,释放inode 进入/tmp目录,执行find -exec命令 find /tmp -type f -exec rm {} \; 遍历寻找0字节的文件,并 ...
- centos7.5上一步步部署jumpserver
1.基础环境:centos7.5:关闭防火墙和selinux 2.修改字符集,否则可能会报input/output error 的问题,因为日志里打印了中文 [root@xzw ~]# localed ...
- (转)CSS3之pointer-events(屏蔽鼠标事件)属性说明
我们在 HTML 开发时可能会遇到这样的情况:页面上有一些元素使用绝对定位布局,这些元素可能会遮盖住它们位置下方的某个元素的部分或者全部.默认情况下,下方元素被遮挡的部分是不会响应鼠标事件的. 但有时 ...
- 论文阅读笔记十五:Pyramid Scene Parsing Network(CVPR2016)
论文源址:https://arxiv.org/pdf/1612.01105.pdf tensorflow代码:https://github.com/hellochick/PSPNet-tensorfl ...
- JS脚本计算从某日凌晨开始,经过了多长时间
var a = new Date();//获取现在的时间 var d = Date.parse("Mar 25, 2019");//设定网站建立的时间 var t = a.getT ...
- 纯css3实现的switch开关按钮
效果如图 <p> <label><input class="mui-switch mui-switch-anim" type="checkb ...
- JavaScript编程语言
JavaScript编程语言 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应 ...
- 用C语言实现窗口抖动
#include "stdafx.h" #include <stdio.h> #include<Windows.h> int main() { ; //休眠 ...
- VS2017+mysql5.7 连接数据库生成实体
参考:https://www.cnblogs.com/RushPasser/p/5438334.html 下载:https://share.weiyun.com/5rM4FrG mysql-for-v ...