2012-03-18 2 views
0

iPad 앱에 포함될 간단한 브라우저를 개발하려고합니다. 해당 브라우저에는 탭이 있습니다. 모든 탭은 거의 모든 .xib 프레임을 채우는 UIWebView이있는 .xib을 기반으로합니다. 나는 NSMutableArray 안에 모두 tabsArray으로 저장합니다. 선언 :ARC에서 UIWebView를 "출시하는 방법"

.H

@property (nonatomic,strong) NSMutableArray *tabsArray; 
@property (nonatomic,strong) UIDetailWebController *pagina; 

하는 .m

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil]; 
[tabsArray insertObject:pagina atIndex:currentViewTag+1]; 

내가 화면에 표시하는 방법을 : 나는 배열에 새 탭을 추가하는 방법

그래서, 여기

[self.view addSubview:[[tabsArray objectAtIndex:currentViewTag+1] view]]; 
[[[tabsArray objectAtIndex:index] view] removeFromSuperview]; 
[[tabsArray objectAtIndex:index] setWebView:nil]; 
[[tabsArray objectAtIndex:index] setView:nil]; 
[tabsArray removeObjectAtIndex:index]; 

내 문제는 다음과 같습니다 :는 그리고 마지막으로, 여기에 내가 사용자 (특정 인덱스) 탭을 닫을 때있는 UIWebView를 "해제"하기 위해 노력하고있어 방법이이 일을함으로써 단순히 '돈 나타납니다 그것을 놓으십시오. 메모리 소비는 동일하게 유지되며 YouTube 동영상을 재생하는 경우 오디오는 계속 재생됩니다. 저는 프로그래밍에 익숙해졌으며, ARC와 함께 iOS 5에서 iOS 개발을 시작했습니다. 따라서 아마도 메모리 관리와 관련된 몇 가지 기본 세부 사항을 슬라이드하게 할 것입니다.

해결책 :

좋아, 내가 PullToRefreshView의 구현 (https://github.com/chpwn/PullToRefreshView) 웹보기를 유지했다 무엇이 것을 발견했다. 내가 delegate를 nil로 설정할 때; 모든 것이 제대로 작동합니다! 속성 pagina

+0

네, self.pagina – JulianoRossi

+0

원래 코드는 이미 self.pagina였습니다. 질문을 형식화하는 동안 잘못 입력했습니다.죄송합니다. – JulianoRossi

+0

'[tabsArray objectAtIndex : index]'의'index'가 정확한 값을 갖고 있습니까? 또한보기를 제거하는 코드가 실제로 호출 되었습니까? – sch

답변

2

강한 속성입니다, 그래서 당신이 그것을 할당 값 유지 : 그래서 당신은 nil로 설정해야

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil]; 

을 :

[tabsArray removeObjectAtIndex:index]; 
self.pagina = nil; // Add this line. 

을 마지막으로,하지 다음 라인들은 필요하지 않을 수도 있습니다 :

[[tabsArray objectAtIndex:index] setWebView:nil]; 
[[tabsArray objectAtIndex:index] setView:nil]; 

그리고 t 모자 라인 :

[[[tabsArray objectAtIndex:index] view] removeFromSuperview]; 

가로 단순화 될 수있다

[self.pagina removeFromSuperview]; 
+0

youtube video playing ...// – JulianoRossi

+0

그것은 해결되지 않습니다. 그러나 아마 이것 일 겁니다. 내 코드가 광범위하므로 다른 유형의 탭을 만드는 데는 여러 가지 방법이 있습니다. 아마도 나는 중간에 무언가를 잊고있을거야. 나는 계속 지켜 볼거야, 내가 풀어 준다면, 너에게 알려 줄게! 고맙습니다! :) – JulianoRossi

+0

속성 pagina 대신에 "UIDetailWebController * pagina = [UIDetailWebController alloc ....]을 만들었습니까? 아무 것도 할 필요가 없습니다. – JulianoRossi

2

나는 문제는 당신이 배열의 모든 UIDetailWebControllers를 저장하는 것이라고 생각합니다. 배열은 DetailWebController에 대한 강력한 포인터를 유지합니다.

[tabsArray removeObjectAtIndex:index]; 

을 그리고 그것을 작동합니다 [self.pagina removeFromSuperView];를 호출 한 후

self.pagina = nil; 

를 설정 : 당신은 사용해야합니다 .

+0

self.pagina를 nil로 설정하면 실제 솔기가 생깁니다. 내가 그것을 속성으로 만들지 않고 그냥 UIDetailWebController * pagina로 선택했다면 webview를 공개하기 위해 다른 작업을 수행 할 필요가 없습니다. – JulianoRossi

관련 문제