(我想获取路径,以便可以在 NSImageView 中加载图像)
您不需要可执行文件的路径来执行此操作。最简单的方法是NSImage 的imageNamed:
方法;第二个最简单的是 St3fan 建议的。
现在让我们来看看你在hard way的实现中遇到的问题:
NSString * _Ruta_APP = [[NSString alloc] init];
这声明了一个名为的局部变量_Ruta_APP
并初始化它以保存一个 NSString 对象,该对象是您拥有的,因为您使用它创建了它alloc
并且没有释放它。
_Ruta_APP = [[NSBundle mainBundle] bundlePath];
这会将不同的字符串对象放入同一个变量中,替换第一个。如果您没有使用垃圾回收,那么第一个对象仍然存在并且您仍然拥有它,即使您不再有办法向它发送消息。因此,你已经泄露了它。
如果您打算将其_Ruta_APP
作为实例变量,请剪切整个第一行。在实例变量中保存不属于您的对象通常是一个坏主意,因此请拥有该对象的所有权;最好的方法是制作一个副本(这样做之后,您将拥有该副本)并将其放入实例变量中。否则,当拥有原始对象的任何东西释放它时,该对象将死亡,但您仍将持有它;然后您将向死对象发送消息,这将使您的应用程序崩溃。请参阅内存管理规则。
如果您打算将其_Ruta_APP
作为局部变量,而不是在任何其他实例方法中,请剪切实例变量。