(我想要得到的路徑,這樣我就可以在NSImageView加載圖像)
你不需要的路徑,你的可執行文件做到這一點。最簡單的方法是NSImage's imageNamed:
method;第二個最簡單的是St3fan建議的。
現在,讓我們通過的問題,在你執行困難的方式:
NSString * _Ruta_APP = [[NSString alloc] init];
這聲明瞭一個名爲_Ruta_APP
的局部變量和初始化它持有一個NSString對象,你自己,因爲你alloc
創建它並沒有公佈它。
_Ruta_APP = [[NSBundle mainBundle] bundlePath];
這將不同的字符串對象放入同一個變量中,替換第一個。如果你沒有使用垃圾收集,那麼第一個對象仍然存在,你仍然擁有它,即使你不再有辦法發送消息。因此,你已經泄露了它。
如果您打算將_Ruta_APP
作爲實例變量,則剪切整個第一行。在您的實例變量中保存您不擁有的對象通常是一個糟糕的主意,因此請取得該對象的所有權;最好的方法是製作副本(在完成之後,您將擁有副本)並將其放入實例變量中。否則,當原始對象釋放它時,對象將會死亡,但是你仍然會持有它;那麼你會發送一個消息給一個死對象,這會導致你的應用程序崩潰。見the memory management rules。
如果您打算將_Ruta_APP
作爲局部變量,而不是任何其他實例方法,請剪切實例變量。
這一個伎倆 – Freaktor 2010-02-03 20:43:51
我的意思是另一個braket和副本。 – Freaktor 2010-02-03 20:45:08
其實,這個答案的細節有很多,「做了詭計」。我建議您努力理解答案中的代碼差異以及原始代碼的細節,否則您可能會一遍又一遍地重複相同的錯誤。 – bbum 2010-02-04 03:51:05