2011-01-05 4 views
0

사과에서 원래 "Photos.app"처럼 내 자신의 photogallery를 작성하고 싶습니다. AppDelegate에서 UITabbarcontroller를 만든 다음 "ImageViewController"및 "VideoViewController"를 만들었습니다. 은 "ImageViewController"i've에서자신의 iPad photogallery - dealloc 오류 쓰기

가있는 UIScrollView를 추가 한 후 imagePerRow 같은 다른 특성을 가진 내 자신의 "PhotoGallery와"의 인스턴스를, 이미지의 "PhotoGallery와"를 등

패딩이 만든 i've했다 "NSObject"의 하위 클래스 인 새로운 objective-c 클래스입니다. 여기서는 모든 다른 이미지를 UIButton으로 배치합니다. 다음은 장치 방향이 변경되었을 때 모든 이미지의 배열을 설명하는 또 다른 기능을 추가했습니다. 그리고 dealloc-function. 그게 다야.

이 클래스는 훌륭하게 작동하며 기기 방향이 변경되었을 때 다시 정렬됩니다. 문제는 ios-simulator에서 메모리 경고를 시뮬레이트하면 처음으로 PhotoGallery가 dealloc을 처음 얻었지만 경고를 다시 시뮬레이트하면 오류 메시지가 나타납니다. "[PhotoGallery release] : 메시지가 할당 취소 된 인스턴스로 전송되었습니다. ".

NSObject와 같은 서브 클래스로 인해 생각했습니다. 맞습니까? 그런 다음 UIView로 테스트했습니다. 같은 오류. 그래서 나는 더 이상 무엇을 해야할지 모르겠다. 문제가 무엇인지 이해하고 그 문제에 대한 힌트를 얻을 수 있기를 바랍니다. init 함수를 다시 호출하는 것에 대해 생각해보십시오. 방법? "drawRect"가 필요합니까? 나는 전혀 모른다. 당신의 시간과 도움, G.

+1

귀하의 질문에 답변하지 않으므로 (코멘트로 추가), 320을 사용 해본 적이 있습니까? 그들은 대부분의 포토 앱을 훌륭하게 구현했습니다. – donkim

+0

예. 답변 감사합니다. 저 혼자서 쓰는 법을 배우고 싶습니다. 나는 3시 20 분 소스를 살펴 보았지만, 지금은 너무 어려워서 단계적으로 배우기로 결정했습니다. – geforce

답변

1

에 대한

덕분에 당신은 아마 전무로와 PhotoGallery에 대한 참조를 보유하는 속성을 설정하지 않는 것입니다.

즉. 할당 해제 된 인스턴스에 대한 참조를 유지하고 그것에 release을 호출하려고합니다.

나쁜 예 : 나쁜 예에서

- (void) didReceiveMemoryWarning 
{ 
    [photoGallery release]; 
    photoGallery = nil; 

    // or combine both actions if your property attributes are set up to accommodate it: 
    // self.photoGallery = nil; 
} 

, 사진 갤러리 여전히 지금 해제 된 인스턴스에 대한 참조를 보유하고, 상기 제 2 메모리 경고 것이다 금고 (R) 예

- (void) didReceiveMemoryWarning 
{ 
    [photoGallery release]; 
} 

메시지를 보내려고 시도하십시오.

safe (r) 예에서 photoGallery는 nil이며 nil에 메시지를 보내는 것이 안전합니다.

+0

예하! 큰! 고칠 수있어?! 좋은! 내 ViewController 또는 NSObject의 하위 클래스를 수정해야한다고 생각했습니다. 그러나 정확하게, 나는 사진 갤러리를 무효로 설정하지 않았다! – geforce

+0

하지만 다시 한번 질문 : PhotoGallery 클래스는 NSObject 또는 UIView의 하위 클래스 여야합니까? 둘 다 장점은 무엇입니까? – geforce

+0

메모리 관리 메소드는 NSObject에서 선언됩니다. UIView에서 서브 클래 싱하면 View의 모든 내장 기능을 사용할 수 있습니다. 상속에 관한 질문이 생길 때 "내 수업은 <수업 명 삽입>입니까?"라고 물어보십시오. 그렇다면 그것을 상속하십시오. – codelark