2012-09-30 1 views
0

// 점많은 웹 뷰로 인해 내 앱이 내 iPhone 4에서 충돌을 일으킬 수 있습니까?

점차 많은 객체 (UIWebView)를 메모리에로드하고 잠시 후 충돌이 발생합니다.

// 세부

나는 (별도의 뷰 컨트롤러) 각 페이지를 사용할 사용자와의 상호 작용과 함께있는 UIWebView를 포함하는 것을 특징으로 수평 페이징과 함께있는 UIScrollView을 가지고 도와주세요. 처음에는 0 페이지의 webview # 0 만로드되고 페이지를 진행하면서 점차적으로 특정 데이터를로드하라는 요청을 보냅니다. 다운로드 된 데이터는 메모리에 남아 있습니다. 나는 인터넷 소스에서 약 20 Webviews, 내 응용 프로그램 동결과 충돌을로드 한 후

. 장치에 저장된 더미 HTML 문자열을 사용하면 약 50 웹뷰를로드 한 후에 이런 일이 발생합니다. 그러나 문제는 지속됩니다.

나는 많은 누설을 수정했고 Mallocs 만 남았습니다. UIWebviews Loaded의 양이 적 으면 문제가 발생하지 않으므로 코드를 변경하여 3 개의 웹 뷰를 말하고 다시 사용해야한다고 가정합니다. 하지만 그게 문제를 해결할 지 모르겠습니다. 나는 크래시가 발생하지 않는 몇 가지 앱을 개발했으며 이것은 독특한 케이스입니다.

나는 webviews과 배열에서 (예 : 라벨 등) 모든 웹보기 내부의 다른 요소에 대한 포인터를 저장합니다. 배열은 새로운 페이지가로드 될 때마다 증가합니다.

내가 개발하는 엑스 코드 4.3과 탈옥 아이폰 4를 사용합니다. 내 xcode에서 서명이 필요하지 않게 된 결과, 앱이 내 휴대 전화로 복사되고 처리에 첨부되지 않습니다. 전화로 디버깅 할 수 없습니다. 내 응용 프로그램은 시뮬레이터에서 잘 작동하지만 아이콘을 두드려서 전화를 시작한 후 잠시 동안 충돌이 발생합니다.

나는 그래서 설명 할 수 누구인지부터

, 당신은 문제가 무엇인지 생각하십니까? 감사합니다.

+0

좋은 응용 프로그램을 만들지 않으려는 경우 jailbroken 장치를 사용하지 마십시오. 코드를 디버깅 할 수 없다면 정말 좋지 않습니다. – mariusLAN

답변

0

예, 확실히 많은 문자가 있습니다. UIWebView은 메모리 부족으로 인해 충돌이 발생합니다. 나는 당신의 이유가 다중 UIWebView을 갖는 것에 대해 확실하지 않지만 몇 가지를 만드는 대신 작은 양의 재사용을위한 아이디어를 수행 할 것입니다.

소량을 사용할 때 장치가 충돌하지 않는 것을 고려할 때, 문제는 너무 많은 0x을 사용하고 사용자의 jailbroken 장치와의 호환성 문제가 아니라고 말합니다.

+0

감사합니다. 너무 과도한 UIWebview 사용으로 인한 것 같습니다. – John

0

WebKit은 메모리 hogging으로 유명합니다. 대규모 메모리 블록을 malloc하고 다른 리소스를 해제 할 수있는 기회를주기 전에 실패합니다. 하나는 UIWebView입니다. 나 혼자하자, 적은 수의 5 UIWebView와 함께 사용하는 응용 프로그램에서이 문제를 했어 (50) 넌 할 수있어 몇 가지가 있습니다

. 웹 페이지가 너무 복잡하지 않은 경우 DTCoreText과 같은 대체보기를 사용하여 렌더링 할 수 있습니다. 웹 뷰가 필요한 경우 다양한 HTML 내용을 캐싱하고 UIWebView을 사용하여 다시 렌더링 할 수 있습니다.

+0

감사! 그것은 WebView 사용을 완전히 폐지하는 것입니다. 현재 UIwebview에 상응하는 모든 UIView에 대해 ViewController를 사용합니다. HTML은 실제로 매우 간단하며 UIImage 및 레이블을 사용하여 재구성 할 수 있습니다. 모든 Webview를 Uiimage 및 5 개의 레이블로 대체하면 성능이 크게 향상 될 것으로 생각합니까? – John

+0

그게 당신의 웹뷰가 보여주는 전부라면, 그것은 더 빠를 것입니다. DTCoreText (https://github.com/Cocoanetics/DTCoreText)는 HTML에서 이미지와 스타일있는 텍스트를 직접 렌더링하므로 고려해야합니다. – rsswtmr

0

페이징에는 세 개의 UIWebView 만 사용해야합니다. 사용자가 페이지 2 (페이지 1은 왼쪽 페이지이고 페이지 3은 오른쪽)에 있다고 가정 해 보겠습니다. 페이지 3으로 스 와이프하면 3 페이지의 1 페이지에있는 웹보기 만 표시 할 수 있습니다. 사용자가 페이지간에 스 와이프 할 때 적절한 html을 다시로드해야합니다. 물건이 다운로드되면 웹 콘텐츠의 일부 캐싱으로

는, 속도는 문제가되지 않습니다.

관련 문제