Memory management for i os dev
Upcoming SlideShare
Loading in...5
×
 

Memory management for i os dev

on

  • 3,558 views

 

Statistics

Views

Total Views
3,558
Views on SlideShare
1,070
Embed Views
2,488

Actions

Likes
0
Downloads
8
Comments
0

6 Embeds 2,488

http://www.e-legion.ru 2426
http://test.e-legion.ru 34
http://www.e-legion.com 13
http://www.slideshare.net 7
http://www.techgig.com 6
url_unknown 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Memory management for i os dev Memory management for i os dev Presentation Transcript

  • Ошибки при работе с памятью наiOS
    Поиск причин падений в связи с “Low Memory” и EXC_BAD_ACCESS
  • Аудитория
    Разработчики
    Разработчики под iOS
  • Работа с памятью под iOS
    reference counted
    NSObject
    alloc/dealloc
    retain/release
    retainCount
  • Работа с памятью под iOS
    plane = [[Plane alloc] init];
    plane2 = [plane retain];
    plane3 = plane;
    [plane release];
    [plane2 release];
     [plane dealloc];
    plane
    1
    2
    0
    Plane
    plane3
    plane2
  • Ошибки при работе с памятью
    Утечки типа 1: ссылки удалены, объект живет
    Утечки типа 2: ссылки есть, объект живет (но зря)
    Обращение к освобожденным объектам: ссылки живут, объект не живет
  • Утечки первого типа
    leakedPlane = [[Plane alloc] init];

    leakedPlaner = [[Plane alloc] init];
    Plane
    leakedPlane
    Leak
    Plane
  • Утечки второго типа
    leakedPlane = [[Plane alloc] init];
    [leakedPlane retain]
    [leakedPlane release]
    Plane
    leakedPlane
  • Обращение к освобожденному объекту
    leakedPlane1 = [[Plane alloc] init];
    leakedPlane2 = leakedPlane1;
    [leakedPlane1 release]; leakedPlane1 = nil;
    [leakedPlane2 fly];
    Elephant
    leakedPlane1
    Plane
    BAD_ACCESS
    leakedPlane2
    Automobile
  • 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
  • EXC_BAD ACCESS
    Program received signal:  “EXC_BAD_ACCESS”
  • Что с этим делать?
    Утечки памяти первого типа (объекты без ссылок)
    Instruments, Leaks
    Утечки памяти второго типа (вечные объекты)
    Instruments, ObjAlloc
    Анализ связей
    Переопределение retain/release
    EXC_BAD_ACCESS
    NSZombieEnabled (stack)
    Instruments, ObjAlloc (new XCode)
    Анализ связей
    Переопределение retain/release/dealloc
  • DEMO
  • Анализ связей
    Кто владеет этим объектом?
    Карта связей
    По каким событиям он должен освобождаться?
    Какие объекты должны освобождаться по этому событию?
  • Вопросы???
  • Контактная информация
    Станислав Краснояров
    Stanislav.Krasnoyarov@gmail.com