2010-12-08 5 views
0

로 이동 변경할 때 카운트를 유지 나는 이런 하나 개의 ViewController에있는 UIImage하고있는 UIImage보기를 선언했다. m 파일 :목표 - C I보기 제로

UIImage *image = [UIImage imageNamed:@"name1.png"]; 
imgView.itemImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 82, 166)]; 
imgView.itemImageView.image = image; 

[self.parentViewController.view addSubview:imgView.itemImageView]; 
[self dismissModalViewControllerAnimated:YES]; 
,174 : 또 다른 관점에서

@synthesize itemImage, itemImageView; 

는, I는 해당 값을 설정

이 메서드 내에서 itemImageView의 보유 개수는 2입니다.

그러나 속성 및 합성을 넣은 뷰로 돌아 가면 보유 개수는 0이고 개체에 액세스 할 수 없습니다.

어떤 아이디어가 발생 했습니까?

답변

0

여기에 코드는 괜찮아 보입니다. (메모리 누출은 제외하고) ImageImageView에 retain-count +1을 지정하면 ImageImageView가 2로 증가합니다. 당신은 itemImageView로 설정 한 후 이미지 뷰에 릴리스를 호출 할 필요가 :

UIImageView* iv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 82, 166)]; 
imgView.itemImageView = iv; 
[iv release]; 

그러나,이 방법으로 문제가 해결되지 않는 더 많은 코드를 보여줄 수 (심지어 .. 더 나쁘게 만들 것입니다)? 디버거를 사용하여 단계별 실행을 시도 했습니까?

0

문제는이 라인이다 :

[self.parentViewController.view addSubview:imgView.itemImageView]; 

이 가장 가능성이 같은 편집해야합니다 :

[self.parentViewController.view addSubview:self.parentViewController.itemImageView]; 

이 imgView이 parentViewController.view 정말 해당 여부의 질문에 연결됩니다. 당신이 원한다면, 당신은 그것이 할당 된 곳을 알아 내고 그것을 엉망으로 만든 곳을 볼 필요가 있습니다. 그렇지 않다면, 그것을 할당하기 전에 ur 객체를 빌드하기위한 임시 컨테이너가 아닌 아무 것도 사용하지 않아도됩니다.

편집 : 메모리 누수가 예 별개의 문제이지만, 메신저되지는 u는 방법 imgView을 선언 방법을 잘 그래서 난 당신이 해결하기 위해 :)

0
UIImageView* itemImageView; 
... 
@property (nonatomic, retain) UIImageView* itemImageView; 
... 
imgView.itemImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 82, 166)]; 

을 이것은 더블 alloc 이후 유지됩니다 것을 왼쪽 보존 카운터를 1 씩 증가시키고 @propertyretain 설정도 증가시킵니다.

속성을 설정하는 일반적인 패턴과 같이이다 :

.H :

SomeClass* someClass; 
... 
@property (nonatomic, retain) SomeClass* someClass; 

하는 .m : 여기

SomeClass* temporarySomeClass = [[SomeClass alloc] init]; 
self.someClass = temporarySomeClass; 
[temporarySomeClass release]; 
... 

, 우리는 임시 변수를 사용하면를 개최 우리가 할당 한 객체, 그리고 바로 다음에 릴리스를하는 것입니다.

Apple 예제 코드에서 확인할 수 있습니다.