NSString copy && strong】的更多相关文章

http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy.那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢?让我们先来看个例子.示例我们定义一个类,并为其声明两个字符串属性,如下所示: @interface TestStringClass ()@property (nonatomic, strong) NSString…
   前些日子笔者一直在维护公司的一些旧项目,项目里面的NSString属性几乎全部用的strong,而我在给项目增加一些新的功能的,又都用的copy,因为在我的脑子里几乎已经把NSString大部分用copy当做了习惯,正好某日给团队元老看到了,与之交流时谈到他说NSString一般都用strong就可以了,一般不会有被外界修改的安全性问题.        然而,我已经习以为常用copy,要强行改过来是一件很蛋疼的事,那当时又正因为是习以为常,所以也没能很好的说出个所以然来,让他觉得确实该用c…
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyString = %p&quo…
深.浅拷贝 copy mutableCopy NSString 1 2 3 4 5 6 NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyStr…
代码如下: 1,声明 @property(nonatomic,strong)NSString *firstName; @property(nonatomic,copy)NSString *secondName; 2,代码 NSMutableString *str1 = [NSMutableString stringWithFormat:@"李博"]; self.firstName = str1; NSLog(@"使用strong第一次得到的名字:%@",self.f…
1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NSString *nameStrong; @property(nonatomic,copy) NSString *nameCopy; @end @implementation ViewCon…
举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段内存用来存储@' MM的三室两厅 ' ,比如:内存地址为 0X1111  内容为 ' MM的三室两厅' ,  2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA  内容自然为 0X1111 下面分别看下(assign,retain,copy):  1.assign…
总结 关于属性的这些选项的学习,做一下总结: 所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全. NSString:通常都使用copy,以得到新的内存分配,而不只是原来的引用. strong:对于继承于NSObject类型的对象,若要声明为强使用,使用strong,若要使用弱引用,使用__weak来引用,用于解决循环强引用的问题. weak:对于xib上的控件引用,可以使用weak,也可以使用strong. __weak:对于变量的声明,如果要使用弱引用,可以使…
虽然开发IOS好多年了.但是这几个关键词总是深深困扰着我.加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了. 先说weak与assign.weak只能修饰对象,不能修饰基本数据类型.而assign既可以修饰基本数据类型,也可以修饰对象.但一般用于修饰基本数据类型.因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在.所以造成野指针.而这个野指针的内存在堆上,所以容易造成堆内存崩溃.而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针. Str…
- (void)fun{  NSString* str = [[NSString alloc] initWithString:@"string"];  NSLog(@"%d", [str retainCount]);}可以看到 str的计数器为-1 而把initWithString换成initWithFormat 计数器就是1 ------解决方案--------------------------------------------------------没有区别…