Ошибки при работе с памятью на iOS Поиск причин падений в связи с “Low Memory” и EXC_BAD_ACCESS

Содержание

Слайд 2

Аудитория Разработчики Разработчики под iOS

Аудитория

Разработчики
Разработчики под iOS

Слайд 3

Работа с памятью под iOS reference counted NSObject alloc/dealloc retain/release retainCount

Работа с памятью под iOS

reference counted
NSObject
alloc/dealloc
retain/release
retainCount

Слайд 4

Работа с памятью под iOS plane = [[Plane alloc] init]; plane2

Работа с памятью под iOS
plane = [[Plane alloc] init];
plane2 = [plane

retain];
plane3 = plane;
[plane release];
[plane2 release];
? [plane dealloc];

Plane

plane

plane2

plane3

1

2

0

Слайд 5

Ошибки при работе с памятью Утечки типа 1: ссылки удалены, объект

Ошибки при работе с памятью

Утечки типа 1: ссылки удалены, объект живет
Утечки

типа 2: ссылки есть, объект живет (но зря)
Обращение к освобожденным объектам: ссылки живут, объект не живет
Слайд 6

Утечки первого типа leakedPlane = [[Plane alloc] init]; … leakedPlaner =

Утечки первого типа

leakedPlane = [[Plane alloc] init];

leakedPlaner = [[Plane alloc] init];

Plane

leakedPlane

Plane

Leak

Слайд 7

Утечки второго типа leakedPlane = [[Plane alloc] init]; [leakedPlane retain] [leakedPlane release] Plane leakedPlane

Утечки второго типа

leakedPlane = [[Plane alloc] init];
[leakedPlane retain]
[leakedPlane release]

Plane

leakedPlane

Слайд 8

Обращение к освобожденному объекту leakedPlane1 = [[Plane alloc] init]; leakedPlane2 =

Обращение к освобожденному объекту

leakedPlane1 = [[Plane alloc] init];
leakedPlane2 = leakedPlane1;
[leakedPlane1 release];

leakedPlane1 = nil;
[leakedPlane2 fly];

Plane

leakedPlane1

leakedPlane2

Elephant

Automobile

BAD_ACCESS

Слайд 9

Low memory Processes Name UUID Count resident pages MobileMail 692 MobilePhone

Low memory

Processes
         Name UUID                    Count resident pages
      MobileMail <0798395dde43ca46317db6e674dfbbfd>    692
     MobilePhone

<82c9bd8583f4b09706a16b08e641a4b9>    489
KingsHeroOrigins <307177e18450cdb18d466c8e7fbb23d9>  12718 (jettisoned) (active)
iPhone/iPod 1st & 2nd generation: 128 MB RAM
Only ~20 MB for application!!!
iPhone 3GS, iPod 3rd generation & iPad: 256 MB RAM
~110 MB for application, but multitasking
Слайд 10

EXC_BAD ACCESS Program received signal: “EXC_BAD_ACCESS”

EXC_BAD ACCESS

Program received signal:  “EXC_BAD_ACCESS”

Слайд 11

Что с этим делать? Утечки памяти первого типа (объекты без ссылок)

Что с этим делать?

Утечки памяти первого типа (объекты без ссылок)
Instruments, Leaks
Утечки

памяти второго типа (вечные объекты)
Instruments, ObjAlloc
Анализ связей
Переопределение retain/release
EXC_BAD_ACCESS
NSZombieEnabled (stack)
Instruments, ObjAlloc (new XCode)
Анализ связей
Переопределение retain/release/dealloc
Слайд 12

DEMO

DEMO

Слайд 13

Анализ связей Кто владеет этим объектом? Карта связей По каким событиям

Анализ связей

Кто владеет этим объектом?
Карта связей
По каким событиям он должен освобождаться?


Какие объекты должны освобождаться по этому событию?
Слайд 14

Вопросы???

Вопросы???