关于iphone:__ weak在NSURL和NSString上的不同行为

Different behavior of __weak on NSURL and NSString

nsstring和nsurl在"弱"上有什么区别?

我的例子:

1
2
3
4
5
__weak NSURL *myURL = [NSURL fileURLWithPath:@"/tmp"];
__weak NSString *myString = @"123";

NSLog(@"myURL: %@", myURL);
NSLog(@"myString: %@", myString);

结果:

2012-07-10 19:23:49.858 myApp[56093:303] myURL: (null)

2012-07-10 19:23:49.859 myApp[56093:303] myString: 123

为什么结果myString不等于(空)


这是因为示例中的字符串是一个永远不会释放的字符串文字。您的属性不保留字符串,但由于它没有被释放,它仍然指向您分配给它的值。

如果您已经使用[NSString stringWithFormat:@"hello"];创建了字符串,那么您将看到预期的行为。


试试这个

nslog(@"myurl:%@",[myurl说明]);

nslog(@"mystring:%@",mystring);

因为"%@"用于表示nsstring而不是nsurl。