__weak在NSURL和NSString上的不同行为

时间:2012-07-10 17:30:19

标签: iphone objective-c

在__weak上,NSString和NSURL之间的区别是什么?

我的例子:

__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 ==(null)

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:-1)

试试这个

NSLog(@“myURL:%@”,[myURL description]);

NSLog(@“myString:%@”,myString);

因为“%@”用于表示NSString而不是NSURL。