- (id)copyWithZone:(NSZone *)zone {
id copy = [[[self
class
] allocWithZone:zone] init];
return
copy;
}
NSString *string = [[NSString alloc] initWithFormat:@
"age is %i"
, 21];
NSMutableString *str = [string mutableCopy];
NSLog(@
"str: &zi"
, [str retainCount]);
NSLog(@
"string: %zi"
, [string retainCount]);
NSLog(@
"%i"
, str == string);
[str appendString@
"123456"
];
NSLog(@
"str = %@"
, str);
NSLog(@
"string = %@"
, string);
[str release];
[string release];
NSString *s1 = [[NSString alloc] initWithFormat:@
"age is %i"
, 21];
NSLog(@
"s1: %zi"
, [s1 retainCount]);
NSString *s2 = [s1 copy];
NSLog(@
"s1: %zi"
, [s1 retainCount]);
NSLog(@
"%i"
, s2 == s1);
ARC
ARC的判断准则:只要没有强指针指向对象,就会释放对象
ARC的特色:
一、不容许调用release、retain、retainCount
二、容许重写dealloc,可是不容许调用[super deallo]
三、@property的参数:
* strong:成员变量时强指针,至关于原来的retain(适用于OC对象类型)
* weak:成员变量时弱指针,至关于原来的assign(适用于OC对象类型)
* assign:适用于非OC对象类型
指针分两种:
一、强指针:默认状况下,全部的指针都是强指针 __strong
二、弱指针:__weak
Xcode是默认使用ARC的,若是某个.m文件真的不想使用ARC,能够经过如下步骤来不适用ARC:
选择Xcode右侧项目树的根,而后是TARGETS -> Build Phases -> Compile Sources,下拉,选择目标.m文件,回车或者双击,弹出输入框,输入"-fno-objc-arc"回车,就能够了,以下图所示:
若是开发环境是非ARC的,想要使用ARC的,将上面的"-fno-objc-arc"改为"-f-objc-arc"就能够了。
ARC循环引用
当两端循环引用的时候,解决方案以下:
一、ARC
1端用strong,另外一端用weak
二、非ARC
1端用retain,另外一端用assign
例如:
在使用ARC下,有两个类:Person、Dog,以下:
Person.h: