NSString *strongObj = [[NSString alloc] init]; //alloc and initialze a new instance
strongObj = @"some value"; //set value to a instance
__weak NSString *weakObj = strongObj; //refer strong pointer to weak obj
strongObj = nil; //set strong object to nil and remove it from memory
strongObj = @"some value 2"; //assign a different value to strong obj
weakObj ; // weak obj still holds // @"some value" // this value event i've set the week obj pointer to nil
请看上面的代码和评论,评论是我的观点/假设。请澄清一下。
谢谢
答案 0 :(得分:0)
字符串文字始终处于活动状态,并且永远不会在运行时释放。当指向的内存被释放时,弱指针无效,因此您错误地期望您的weakObj无效。
要使它工作,而不是文字字符串,你应该使用
[[NSString alloc] initWithFormat:@"some value %d", 1];
即克。
NSString *strongObj = [[NSString alloc] initWithFormat:@"some value %d", 1]; //alloc and initialze a new instance
__weak NSString *weakObj = strongObj; //refer strong pointer to weak obj
strongObj = nil; //set strong object to nil and remove it from memory
weakObj ;
答案 1 :(得分:0)
虽然您正在创建strongObj
实例,但实际上您并未使用相同的实例,而是将指针重新分配给字符串文字@"some value"
,无论地址是什么。它绝不是您在代码的第一行分配的相同实例。
现在,当您指定weakObj
时,您实际上会将其指向相同的字符串文字@"some value"
。
基本上发生的是weakObj
不跟随strongObj
,但它跟在字符串文字后面,而不是取消分配。这就是为什么当strongObj
设置为nil
时,您仍然会看到"某些值" 。