object-c中得ARC内存管理,strong,weak,unsafe_unretained标记的属性,表现出来的行为完全一样

颜风 发布于 2014/04/27 22:46
阅读 1K+
收藏 0

原来学C++,对OC的ARC,很是困惑,书上所说的用strong,weak,unsafe_unretained标记的属性,会表现出不同的行为,但事实并非如此.

以下面代码为例:

@property(nonatomic, strong)NSString* string1;

@property(nonatomic, unsafe_unretained)NSString* string2;

//此处unsafe_unretained可以换成strong,或者weak


下面代码的输出结果均为:string2 = String1


    self.string1 = [[NSString alloc]initWithString:@"string 1"];

    self.string2 = self.string1;

    self.string1 = nil;

    NSLog(@"string2 = %@", self.string2);

无法理解!对象并没有被weak标记后,失去强引用后,并没有被[立即]销毁啊!

oc的内存管理原则,到底是根据指令,理解销毁可以销毁的变量;还是只是在需要空间时,再去销毁可以销毁的对象????

加载中
0
颜风
颜风
不要用NSString 行为特殊
0
Leon_wy
Leon_wy
做实验没找到好的对象啊
0
Roger_Jin
Roger_Jin

string对象应该会被分配在全局区,全局区的数据不会立即销毁的,而且它这个销毁也是指针指向内存的断开,而不是对应内存区的销毁,估计是对应内存做了标志

返回顶部
顶部