는
당신은 그렇게 실행 파일의 경로를 필요로하지 않는다 (나는 내가 NSImageView에서 이미지를로드 할 수 있도록 경로를 싶어). 가장 쉬운 방법은 NSImage's imageNamed:
method입니다. 두 번째로 쉬운 것은 St3fan이 제안한 것입니다.이제
의 하드 방식의 구현에 문제를 통해 가자 : 당신이 alloc
그것을 만든 때문에 자신이 _Ruta_APP
라는 이름의 지역 변수를 선언하고있는 NSString 객체를 개최 초기화
NSString * _Ruta_APP = [[NSString alloc] init];
, 그것을 공개하지 않았습니다.
는
_Ruta_APP = [[NSBundle mainBundle] bundlePath];
이 첫번째 대체 같은 변수에 다른 캐릭터 오브젝트를 둔다. 가비지 수집을 사용하고 있지 않다면 더 이상 메시지를 보낼 방법이 없어도 첫 번째 객체가 아직 살아 있고 여전히 소유하고 있습니다. 따라서, 당신은 그것을 유출했습니다.
_Ruta_APP
을 인스턴스 변수로 사용하려는 경우 첫 번째 줄 전체를 잘라냅니다. 일반적으로 인스턴스 변수에서 소유하지 않은 객체를 보유하는 것은 좋지 않으므로이 객체의 소유권을 가져야합니다. 가장 좋은 방법은 복사본을 만드는 것입니다 (그렇게 한 후에 복사본을 소유하게됩니다). 인스턴스 변수에 그 복사본을 넣으십시오. 그렇지 않으면 원래 객체가 소유하고있는 것이 무엇이든 그것을 해제하면 객체는 죽을 것이나 여전히 그 객체를 보유하게됩니다. 죽은 객체에 메시지를 보내면 앱이 다운됩니다. the memory management rules을 참조하십시오.
다른 인스턴스 메서드가 아닌 _Ruta_APP
을 로컬 변수로 사용하려는 경우 인스턴스 변수를 잘라냅니다.
이것은 하나의 속임수를했습니다 – Freaktor
나는 다른 브래킷과 사본을 의미합니다. – Freaktor
실제로이 답변에는 "트릭을 수행했다"는 내용이 많이 있습니다. 나는 답안과 원본 코드의 차이점에 대한 자세한 내용을 이해하려고 노력할 것을 제안한다. 그렇지 않으면 같은 오류를 반복해서 반복 할 위험이있다. – bbum