对象不释放目标C.

Ben*_*ter 1 memory-management objective-c

我无法理解为什么NSLog在代码运行时报告"dog".我理解保留计数和dealloc等我错过了什么简单的事情?

NSString *newFoo = @"dog";
 [newFoo release];
 NSLog(newFoo);
Run Code Online (Sandbox Code Playgroud)

Wil*_*and 7

[@"String Literal" release];
Run Code Online (Sandbox Code Playgroud)

是一个noop;

NSString *literal = @"String Literal";
[literal release];
Run Code Online (Sandbox Code Playgroud)

也是一个noop.这只是字符串文字的情况; 而且你永远不应该在其他地方期待这种行为.(这就是说;即使你告诉对象要释放,它也不会.)

  • 在编程时,你绝对不应该考虑这种行为.保留计数是一个实现细节,您唯一应该关心的是保留您的版本. (2认同)

Gre*_*ley 5

我相信这是因为@"dog"被编译器有效地视为常量.它创建了NSString的一些子类(它是一个类集群),它在应用程序的生命周期中持续存在.

刚刚发现了这个问题的最终答案,这与我的答案基本相同.