2011-04-25 3 views
0

.h 파일에 UIAlertView * 경고를 선언했습니다. func1에서 할당 경고. func2에 & 릴리스를 표시하십시오. 이로 인해 메모리 BAD_EXEC_ACCESS 문제가 발생합니다.UIAlertView를 현지화해야하는 이유는 무엇입니까?

-(void) func1 
{ 
alert= [[UIAlertView alloc] initWithTitle:nil message:@"To Confirm." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

} 

-(void) func2 
{ 
[alert show]; 
[alert release]; 
} 

다음과 같이하면 괜찮습니다. 모든 것이 함수 내에서 지역화 되었다면 OK입니다. 왜?

-(void) func1 
{ 
alert= [[UIAlertView alloc] initWithTitle:nil message:@"To Confirm." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 
} 

답변

-1

2 기능 접근 방식에서는 func1에 경고가 표시되지 않고이 메모리가 누수됩니다. 그런 다음 func2에서 alert (표시하기 위해)에 액세스하면 retain 카운트가 여전히 0이고 할당이 취소되었을 수 있습니다. 당신은 이중 기능 케이스의 FUNC1에

[alert retain]; 

를 추가하는 경우 , 그것을 작동합니다.

단일 기능의 경우 동일한 범위 내에서 모두 할당 및 사용하고 해제하므로 메모리 문제가 없습니다.

당신은 또한 당신의 .H 파일에

@property (nonatomic,retain) UIAlertView *alert; 

를 선언 한 다음 기능에 self.alert로 참조 할 수있다. @synthesize하고 dealloc 메소드에서 해제해야합니다.

+4

에서 당신이 FUNC1에 할당 (그리고이 완료되면이를 해제) 후, [alertView이 유지] 또는 ALLOC이 전화'alloc'은 그것으로 암시'retain'를 전달합니다. 나는 이것이 실제 문제라고 생각하지 않는다. 내 생각에'func2'가 두 번 이상 호출되어서 경고를 과도하게 발표하는 것 같다. –

+0

노아가 옳다고 생각합니다. func1과 2가 무엇인지 궁금합니다. 전체 컨트롤러가 1과 2 사이의 범위를 벗어나니까? – Rayfleck

+0

문제가 해결 되었습니까? 이 기능들을 어떻게 사용하고 있습니까? 코드를 게시 할 수 있습니까? – Sid

-1

alertView는 하나의 메서드 내에 할당 한 다음 다른 메서드에서 액세스하려고하면 범위를 잃습니다.

는 어느 FUNC2

+0

마이크의 대답은 똑같은 말을하고 있지만 포맷이 잘되어있어서 그 중 하나를 참조하십시오 : D – Sid

+0

OP는 'alert'가 헤더 파일에 선언되어 있으므로 범위가 문제가되지 않아야한다고합니다. – kubi

+0

예. 나는 그것을 읽었으며, 내가 말한 것은 그러한 경우에도 마찬가지입니다. 그것을 시도해보십시오 .... – Sid

관련 문제