问题描述:app 出现内存偏高的问题,app 是一个展示图片居多的app,浏览多个图片list 页以后,内存最高峰值跑到了150m,然后app 出现了闪退;
问题:
① 怎么能够避免内存偏高的问题?
② 如果不能避免那么怎么降低内存偏高呢?
③ 如果上面两个问题都不能解决,那么出现内存偏高的时候怎么处理可以避免闪退呢?
ringa_lee2017-04-18 09:20:33
위에서 언급했듯이 먼저 메모리 누수가 있는지 확인하세요.
1. 충돌 원인은 무엇인가요? 로그가 보이지 않으면 메모리 사용량이 많아서인지 확인할 수 없습니다.
2. 이미지 목록을 보면 SDWebImage 등을 이용해 이미지를 캐시하고, 캐시에서 사용하는 메모리의 상한을 설정해 테이블을 재사용할 수 있어 메모리를 많이 사용하지 않습니다. .
天蓬老师2017-04-18 09:20:33
사진이 너무 많이 표시되어 메모리가 늘어나는 경우 먼저 사진이 공개되었는지 확인하세요. 정상적인 상황에서는 사진이 제때 공개되지 않습니다.
PHP中文网2017-04-18 09:20:33
특정 작업 후 메모리가 갑자기 높아지다가 안정적으로 유지되거나 계속해서 높아지면 기본적으로는 메모리 누수로 판단할 수 있습니다.
메모리 누수를 판단할 때는 먼저 코드의 어느 부분에서 메모리 누수가 발생하는지 판단해야 합니다.
두 번째, 이미지로 인해 발생하는 경우 네트워크에서 요청한 이미지에 로컬이 없기 때문일 수 있습니다. 캐시;
셋째, 네트워크 요청, 데이터베이스 작업, UIView 클래스 및 하위 클래스 출시에 주의하세요.
마지막으로 Xcode에서 프로젝트를 디버깅할 수 있습니다Product->Profile
. 컴파일이 완료된 후 Instruments를 호출하고 Leaks를 사용하여 메모리 누수를 확인하세요.
PHP中文网2017-04-18 09:20:33
보다 일반적인 이미지 최적화는 원본 데이터의 이미지가 너무 커서 메모리가 늘어나는 것일 수도 있습니다. 목록에는 썸네일을 사용하는 것이 좋습니다.
ringa_lee2017-04-18 09:20:33
화면 밖으로 슬라이드되는 셀의 그림은 공개되지 않는 것 같아요. 일반적으로 화면 밖으로 슬라이드되는 셀은 공개되는 것 같아요 -->셀 안의 내용이 공개됩니다-->UIImageView is release--> 그런 다음 UIImage가 릴리스되고 릴리스 체인에 릴리스되지 않은 링크가 있는지 확인합니다. NSCache와 같은 NSArray에 저장된 것과 같이 UIImage 객체가 다른 곳에서 참조될 가능성이 높습니다. 해제는 강력한 참조 없이 이 객체를 저장하는 것을 의미합니다