ios copy 和 retain 字符串

  1 @property (retain, nonatomic) NSString *retainStr;
  2 @property (copy, nonatomic)   NSString *copyStr;
  3
  4
  5
  6 @property (retain, nonatomic) NSMutableString *retainMStr;
  7 @property (copy, nonatomic)   NSMutableString *copyMStr;
  8
  9
 10
 11 实现代码如下:
 12
 13     NSMutableString *mStr = [NSMutableString string];
 14
 15     [mStr setString:@"我没变"];
 16
 17
 18
 19     self.retainStr   = mStr;
 20
 21     self.copyStr     = mStr;
 22
 23     self.retainMStr = mStr;
 24
 25     self.copyMStr   = mStr;
 26
 27
 28
 29     NSLog(@"retainStr:%@",  self.retainStr);
 30
 31     NSLog(@"copyStr:%@",    self.copyStr);
 32
 33     NSLog(@"retainMStr:%@", self.retainMStr);
 34
 35     NSLog(@"copyMStr:%@",   self.copyMStr);
 36
 37     NSLog(@"\n");
 38
 39
 40
 41     [mStr setString:@"我变了"];
 42
 43
 44
 45     NSLog(@"retainStr:%@",  self.retainStr);
 46
 47     NSLog(@"copyStr:%@",    self.copyStr);
 48
 49     NSLog(@"retainMStr:%@", self.retainMStr);
 50
 51     NSLog(@"copyMStr:%@",   self.copyMStr);
 52
 53     NSLog(@"\n");
 54
 55
 56
 57     NSString *str = @"我来了";//[[NSString alloc] initWithFormat:@"我来了"];//两种方式都一样。
 58
 59     self.retainStr  = str;
 60
 61     self.copyStr    = str;
 62
 63     self.retainMStr = [str mutableCopy];
 64
 65     self.copyMStr   = [str mutableCopy];
 66
 67
 68
 69     NSLog(@"retainStr:%@",  self.retainStr);
 70
 71     NSLog(@"copyStr:%@",    self.copyStr);
 72
 73     NSLog(@"retainMStr:%@", self.retainMStr);
 74
 75     NSLog(@"copyMStr:%@",   self.copyMStr);
 76
 77     NSLog(@"\n");
 78
 79
 80
 81     str =@"我走了";//[[NSStringalloc] initWithFormat:@"我走了"];//两种方式都一样
 82
 83
 84
 85     NSLog(@"retainStr:%@",  self.retainStr);
 86
 87     NSLog(@"copyStr:%@",    self.copyStr);
 88
 89     NSLog(@"retainMStr:%@", self.retainMStr);
 90
 91     NSLog(@"copyMStr:%@",   self.copyMStr);
 92
 93     NSLog(@"\n");
 94
 95
 96
 97 打印结果如下:
 98
 99 2012-10-12 13:53:14.858 StringDemo[1515:11303] retainStr:我没变
100
101 2012-10-12 13:53:14.860 StringDemo[1515:11303] copyStr:我没变
102
103 2012-10-12 13:53:14.861 StringDemo[1515:11303] retainMStr:我没变
104
105 2012-10-12 13:53:14.862 StringDemo[1515:11303] copyMStr:我没变
106
107 2012-10-12 13:53:14.863 StringDemo[1515:11303]
108
109 2012-10-12 13:53:14.864 StringDemo[1515:11303] retainStr:我变了
110
111 2012-10-12 13:53:14.865 StringDemo[1515:11303] copyStr:我没变
112
113 2012-10-12 13:53:14.866 StringDemo[1515:11303] retainMStr:我变了
114
115 2012-10-12 13:53:14.867 StringDemo[1515:11303] copyMStr:我没变
116
117 2012-10-12 13:53:14.868 StringDemo[1515:11303]
118
119 2012-10-12 13:53:14.869 StringDemo[1515:11303] retainStr:我来了
120
121 2012-10-12 13:53:14.869 StringDemo[1515:11303] copyStr:我来了
122
123 2012-10-12 13:53:14.870 StringDemo[1515:11303] retainMStr:我来了
124
125 2012-10-12 13:53:14.871 StringDemo[1515:11303] copyMStr:我来了
126
127 2012-10-12 13:53:14.872 StringDemo[1515:11303]
128
129 2012-10-12 13:53:14.873 StringDemo[1515:11303] retainStr:我来了
130
131 2012-10-12 13:53:14.874 StringDemo[1515:11303] copyStr:我来了
132
133 2012-10-12 13:53:14.875 StringDemo[1515:11303] retainMStr:我来了
134
135 2012-10-12 13:53:14.876 StringDemo[1515:11303] copyMStr:我来了

ios copy 和 retain 字符串,布布扣,bubuko.com

时间: 2024-12-28 00:09:03

ios copy 和 retain 字符串的相关文章

【iOS面试系列-1】iOS中@property 后assign,copy,retain,weak,strong的意义与区别(必考-必须详细掌握)

来源:网络 assign: 普通(简单)赋值,一般常用于基本数据类型,常见委托设计模式,一次来防止循环引用.不更改索引计数(Reference Counting). 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等) retain:保留计数,获得到了对象的所有权,引用计数在原有基础上+1.释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 .我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用

IOS内存管理retain,assign,copy,strong,weak

IOS内存管理retain,assign,copy,strong,weak IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用计数+1copy copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对象计数不变 release 对象引用计数-1 如果为

iOS中assign、copy 、retain等关键字的含义

assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是:比如一个NSString对象,地址为0×1111,内容为@"STR" Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 retain到另外一个NSString之 后,地址相同(建立一个指

iOS copy/retain/assign

1 深复制:内容拷贝,源对象和副本对象指的是两个不同的对象,源对象引用计数器不变,副本对象引用计数器为1 2 浅复制:指针拷贝,源对象和副本对象指的都是同一个对象,对象引用计数器+1,相当于retain 3 只有不可变对象创建不可变副本(copy)才是浅复制,其它的都是深复制 copy关键字的使用 平时我们使用对象之间的传值都是采用retain count +1的方式,这种方式的适用于当对象的某属性的值改变时,引用该对象的不同指针会同时改变,因为这两个指针指向的是同一个内存地址, 但如果需求是,

iOS中assign,copy,retain之间的区别以及weak和strong的区别

@property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 weak 和strong的区别: (weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会

copy 与 retain的区别,以及copy与mutablecopy的区别

copy 与 retain的区别 copy: 建立一个索引计数为1的对象,然后释放旧对象      retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是:比如一个NSString对象,地址为0×1111,内容为@”STR”, Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 而retain到另外一个NSString之 后,地址相同(建立一个指针

iOS-assign、copy 、retain等关键字的含义

iOS中assign.copy .retain等关键字的含义 assign: 简单赋值,不更改索引计数 copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为0×1111,内容为@”STR” Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 retai

atomic与nonatomic,assign,copy与retain的定义和区别

atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作. atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全. 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果.加了atomic,setter函数会变成下面这样: {lock} f (property != newValue) { [property release]; property = [newValue retain]; } {unlock} nonat

objective-c中nonatomic,assign,copy,retain的区别

nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问. (atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误.而这种机制是耗费系统资源的,所 以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择.) assign: 简单赋值,不更改索引计数 对基础数据类型 (NSInteger)和C数据类型(int, float