Memory management for i os dev

4,511 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,511
On SlideShare
0
From Embeds
0
Number of Embeds
3,326
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memory management for i os dev

  1. 1. Ошибки при работе с памятью наiOS<br />Поиск причин падений в связи с “Low Memory” и EXC_BAD_ACCESS<br />
  2. 2. Аудитория<br />Разработчики<br />Разработчики под iOS<br />
  3. 3. Работа с памятью под iOS<br />reference counted<br />NSObject<br />alloc/dealloc<br />retain/release<br />retainCount<br />
  4. 4. Работа с памятью под iOS<br />plane = [[Plane alloc] init];<br />plane2 = [plane retain];<br />plane3 = plane;<br />[plane release];<br />[plane2 release]; <br /> [plane dealloc];<br />plane<br />1<br />2<br />0<br />Plane<br />plane3<br />plane2<br />
  5. 5. Ошибки при работе с памятью<br />Утечки типа 1: ссылки удалены, объект живет<br />Утечки типа 2: ссылки есть, объект живет (но зря)<br />Обращение к освобожденным объектам: ссылки живут, объект не живет<br />
  6. 6. Утечки первого типа<br />leakedPlane = [[Plane alloc] init];<br />…<br />leakedPlaner = [[Plane alloc] init];<br />Plane<br />leakedPlane<br />Leak<br />Plane<br />
  7. 7. Утечки второго типа<br />leakedPlane = [[Plane alloc] init];<br />[leakedPlane retain]<br />[leakedPlane release]<br />Plane<br />leakedPlane<br />
  8. 8. Обращение к освобожденному объекту<br />leakedPlane1 = [[Plane alloc] init];<br />leakedPlane2 = leakedPlane1;<br />[leakedPlane1 release]; leakedPlane1 = nil;<br />[leakedPlane2 fly];<br />Elephant<br />leakedPlane1<br />Plane<br />BAD_ACCESS<br />leakedPlane2<br />Automobile<br />
  9. 9. Low memory<br />Processes<br />         Name                 UUID                    Count resident pages<br />      MobileMail <0798395dde43ca46317db6e674dfbbfd>    692<br />     MobilePhone <82c9bd8583f4b09706a16b08e641a4b9>    489<br />KingsHeroOrigins <307177e18450cdb18d466c8e7fbb23d9>  12718 (jettisoned) (active)<br />iPhone/iPod 1st & 2nd generation: 128 MB RAM<br />Only ~20 MB for application!!!<br />iPhone 3GS, iPod 3rd generation & iPad: 256 MB RAM<br />~110 MB for application, but multitasking<br />
  10. 10. EXC_BAD ACCESS<br />Program received signal:  “EXC_BAD_ACCESS”<br />
  11. 11. Что с этим делать?<br />Утечки памяти первого типа (объекты без ссылок)<br />Instruments, Leaks<br />Утечки памяти второго типа (вечные объекты)<br />Instruments, ObjAlloc<br />Анализ связей<br />Переопределение retain/release<br />EXC_BAD_ACCESS<br />NSZombieEnabled (stack)<br />Instruments, ObjAlloc (new XCode)<br />Анализ связей<br />Переопределение retain/release/dealloc<br />
  12. 12. DEMO<br />
  13. 13. Анализ связей<br />Кто владеет этим объектом?<br />Карта связей<br />По каким событиям он должен освобождаться? <br />Какие объекты должны освобождаться по этому событию?<br />
  14. 14. Вопросы???<br />
  15. 15. Контактная информация<br />Станислав Краснояров<br />Stanislav.Krasnoyarov@gmail.com<br />

×