Objective-C Copy语法(一)对于Objective-C 提供的类对象NSString/NSMutableString; NSArray/NSMutableArray...
2014-03-12 14:33
519 查看
@在Objective-C 语法中,提供了Copy语法(Copy + MutableCopy)用于对象的拷贝,其中有2个含义 浅拷贝和深拷贝
//
浅拷贝:指针拷贝,不会产生新的对象。源对象计数器+1。
// 深拷贝:内容拷贝,会产生新的对象。新对象计数器置为1,源对象计数器不变。
NSString/NSMutableString:(NSArray/NSMutableArray同理)
①对于 mutableCopy ,一定是深拷贝。
②对于 copy:(只有一种情况下是发生浅拷贝:不可变对象 复制到 不可变对象。)
如果是 NSString ---> NSString;则是浅拷贝;
如果是 NSMutableString ---> NSString;则是深拷贝。
如果是 NSString 、NSMutableString ---> NSMutableString;则是深拷贝。
#pragma mark 不可变字符串的拷贝(浅拷贝)
void stringCopy() {
NSString *string = [NSString stringWithFormat:@"money is %i", 10000];
NSLog(@"%zi", [string retainCount]);
// copy产生的是不可变副本,由于源对象本身就不可变,所以为了性能着想,copy会直接返回源对象本身
// 源对象计数器会+1
// 在浅拷贝情况下,copy其实就相当于retain
NSString *str = [string copy];
NSLog(@"%zi", [string retainCount]);
}
#pragma mark 可变字符串的copy(深拷贝)
void mutableStringCopy() {
NSMutableString *string = [NSMutableString stringWithFormat:@"money is %i", 10000];
// 会产生一个新对象,str计数器为1
NSString *str = [string copy];
}
#pragma mark 可变字符串的MutableCopy(深拷贝)
void mutableStringMutableCopy() {
NSMutableString *string = [NSMutableString stringWithFormat:@"money is %i", 10000];
// 会产生一个新对象,str计数器为1
NSMutableString *str = [string mutableCopy];
[str appendString:@"1234"];
NSLog(@"str:%@", str);
NSLog(@"string:%@", string);
}
//
浅拷贝:指针拷贝,不会产生新的对象。源对象计数器+1。
// 深拷贝:内容拷贝,会产生新的对象。新对象计数器置为1,源对象计数器不变。
NSString/NSMutableString:(NSArray/NSMutableArray同理)
①对于 mutableCopy ,一定是深拷贝。
②对于 copy:(只有一种情况下是发生浅拷贝:不可变对象 复制到 不可变对象。)
如果是 NSString ---> NSString;则是浅拷贝;
如果是 NSMutableString ---> NSString;则是深拷贝。
如果是 NSString 、NSMutableString ---> NSMutableString;则是深拷贝。
#pragma mark 不可变字符串的拷贝(浅拷贝)
void stringCopy() {
NSString *string = [NSString stringWithFormat:@"money is %i", 10000];
NSLog(@"%zi", [string retainCount]);
// copy产生的是不可变副本,由于源对象本身就不可变,所以为了性能着想,copy会直接返回源对象本身
// 源对象计数器会+1
// 在浅拷贝情况下,copy其实就相当于retain
NSString *str = [string copy];
NSLog(@"%zi", [string retainCount]);
}
#pragma mark 可变字符串的copy(深拷贝)
void mutableStringCopy() {
NSMutableString *string = [NSMutableString stringWithFormat:@"money is %i", 10000];
// 会产生一个新对象,str计数器为1
NSString *str = [string copy];
}
#pragma mark 可变字符串的MutableCopy(深拷贝)
void mutableStringMutableCopy() {
NSMutableString *string = [NSMutableString stringWithFormat:@"money is %i", 10000];
// 会产生一个新对象,str计数器为1
NSMutableString *str = [string mutableCopy];
[str appendString:@"1234"];
NSLog(@"str:%@", str);
NSLog(@"string:%@", string);
}
相关文章推荐
- NSString为什么用copy而不是strong,NSMutableString为什么用strong而不是用copy(或者NSArray及NSMutableArray等)
- Objective-C NSString NSMutableString NSArray NSMutableArray
- OC学习之道:OC对象,字符串和数组的使用方法NSString,NSMutableString ,NSArray,NSMutableArray
- Objective-C NSString NSMutableString NSArray NSMutableArray
- NSString+NSMutableString+NSArray+NSMutableArray+NSNumber+NSValue用法汇总
- Objective-C语法之NSArray和NSMutableArray
- 《黑马程序员》 NSArray和NSMutableArray的使用(Objective - c语法)
- Objective-C语法之NSArray和NSMutableArray
- Objective-C语法之NSArray和NSMutableArray
- NSString和NSMutableString的使⽤ NSArray和NSMutableArray的初级使⽤
- Objective-C语法之NSArray和NSMutableArray
- Objective-C语法之NSArray和NSMutableArray
- Objective-C语法之NSArray和NSMutableArray
- 关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary
- Objective-C语法之NSArray和NSMutableArray
- 10、Objective-C语法之NSArray和NSMutableArray
- Objective-C语法之NSArray和NSMutableArray
- Objective-C语法之NSArray和NSMutableArray
- iOS OC(四) 字符串NSString 可变数组NSMutableArray 不可变数组NSArray 数值对象类NSNumber NSValue 数值对象类NSNumber
- Objective-C语法-数组NSArray和可变数组NSMutableArray