BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #18027同步于 2014/11/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

碰到IOS基础问题

payne14
2014/11/25镜像同步16 回复
我在appdelegate.h里定义了两个copy修饰的变量: @property(nonatomic, copy)NSString *string1; @property(nonatomic, copy)NSString *string2; 然后再appdelegate.m里给他们赋了相同的值: string1 = @"string"; string2 = @"string"; 我觉得string1和string2这两个指针会指向不同的内存,内存里放的都是"string",但是打印地址之后却指向了同一块的内存,为什么会这样,是我对copy理解错了吗?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dss886机器人#1 · 2014/11/25
mark,学习 【 在 payne14 (长门_) 的大作中提到: 】 : 我在appdelegate.h里定义了两个copy修饰的变量: : @property(nonatomic, copy)NSString *string1; : @property(nonatomic, copy)NSString *string2; : ...................
apocalypse机器人#2 · 2014/11/25
提示一下 你把2个 property 的nsstring 换成 nsmutablestring试试 记得不要用 self.string1 = @"xx" 赋值 这样无论你定义的是什么类型 @“”都是nsstring
payne14机器人#3 · 2014/11/26
嗯,我知道nsmutablestring的mutableCopy方法可以拷贝到不同内存。。那用copy修饰的nsstring的怎么理解啊 【 在 apocalypse 的大作中提到: 】 : 提示一下 你把2个 property 的nsstring 换成 nsmutablestring试试 : 记得不要用 self.string1 = @"xx" 赋值 这样无论你定义的是什么类型 @“”都是nsstring
apocalypse机器人#4 · 2014/11/26
【 在 payne14 的大作中提到: 】 : 嗯,我知道nsmutablestring的mutableCopy方法可以拷贝到不同内存。。那用copy修饰的nsstring的怎么理解啊 其实 对于 nsstring 底层 根本不进行copy 直接和strong 是一模一样的。。。 原因是 nsstring 是只读的。。。nsstring 一旦创建出来就不可修改。。 nsstring的赋值过程 是 完全创建一个新的 nsstring 然后直接替换 nsmutablestring的赋值过程是 在原对象上属性进行修改。。。 后者对copy是有需求的。。copy出一份 以免内存上的公用造成修改一处 影响其他处。。(深浅拷贝) 但是nsstring 根本就是只读。。。他没有这个问题。。。没啥要copy的场景。。你copy出2个 不能修改的nsstring 没啥意义 于是底层 对nsstring 的copy处理 其实就是和retain 一模一样
payne14机器人#5 · 2014/11/26
嗯,懂了,非常感谢 【 在 apocalypse 的大作中提到: 】 : : 其实 对于 nsstring 底层 根本不进行copy 直接和strong 是一模一样的。。。 : 原因是 nsstring 是只读的。。。nsstring 一旦创建出来就不可修改。。 : ...................
yyjing机器人#6 · 2014/11/27
都指向数据段同一地址 【 在 payne14 的大作中提到: 】 我在appdelegate.h里定义了两个copy修饰...
toulaoshi机器人#7 · 2015/3/7
【 在 apocalypse 的大作中提到: 】 : : 其实 对于 nsstring 底层 根本不进行copy 直接和strong 是一模一样的。。。 : 原因是 nsstring 是只读的。。。nsstring 一旦创建出来就不可修改。。 : ................... 昨天看到这个帖子,想起书中说nsstring属性最好设成copy,于是自己就试了下,发现如果对@(copy)NSString *name;这样的属性赋值,如果赋值对象是一个NSString的可变子类(NSMutableString),是会拷贝一份再赋值的,这也是为啥要设成copy的原因,因为它有可变子类。 代码 CopyTest *test = [[CopyTest alloc]init]; CopyTest *test1 = [[CopyTest alloc]init]; test.name = @"jack"; test1.name = @"jack"; NSLog(@"test.name address is %p",test.name); NSLog(@"test.name address is %p",test1.name); NSString *name = [NSMutableString stringWithFormat:@"%@",@"toulaoshi"]; test.name = name; test1.name = name; NSLog(@"test.name address is %p",test.name); NSLog(@"test.name address is %p",test1.name); 结果 2015-03-07 12:58:48.524 bdmaptest[1045:251273] test.name address is 0x1423a4 2015-03-07 12:58:48.526 bdmaptest[1045:251273] test.name address is 0x1423a4 2015-03-07 12:58:48.526 bdmaptest[1045:251273] test.name address is 0x175c3a30 2015-03-07 12:58:48.527 bdmaptest[1045:251273] test.name address is 0x175ba7b0
LeeSir机器人#8 · 2015/3/20
求问什么书 【 在 toulaoshi 的大作中提到: 】 : 昨天看到这个帖子,想起书中说nsstring属性最好设成copy,于是自己就试了下,发现如果对@(copy)NSString *name;这样的属性赋值,如果赋值对象是一个NSString的可变子类(NSMutableString),是会拷贝一份再赋值的,这也是为啥要设成copy的原因,因为它有可变子类。 : 代码 : CopyTest *test = [[CopyTest alloc]init]; : ...................
h1050311695机器人#9 · 2015/3/21
苹果做的优化 发自「贵邮」