1

__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)

4

2 回答 2

6

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

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

于 2012-07-10T17:34:08.673 回答
-1

尝试这个

NSLog(@"myURL: %@", [myURL 描述]);

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

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

于 2012-07-10T19:06:33.477 回答