Objective-cメモリオーバーフロー問題経験まとめ


iOS              ,            ;         ,                                ;      iOS              ;     autorelease  ;           ;                               ;
iOS        
  iOS      ,             ?         ,      crash,         ,    iOS           ;        iOS         ,autorelease           ,      iOS           ,         ;
1 iOS         
iOS                ;          alloc  allWithZone   ,      +1;       release   ,      -1;                         ,       0,            ;  ,iOS              AutoRelease,          ,         ,             ;   iOS             ,                               ,       iOS                             ;
2 iOS        
2.1          
2.1.1    ,   ; 
    alloc,new  copy,mutableCopy     ,     release  autorelease      ;
      ,       !
2.1.2  retain,   ; 
          retain  ,      +1,        release  autorelease             ;
      ,       !
2.1.3      retain,   ; 
          alloc  retain   ,     crash;
    autorelease   ,     crash;
2.2            
    ,                ,                  。                ,    ,      。               。         ,                。  ,             。          ,            ,            。
2.2.1     
                       1,               ;
ClassA* objA = [[ClassA alloc] init];
ClassA* objB = [objA copy];
objB      ,     1, objB     objA   ;
  : objB    ,         !
2.2.2     
       ,        ,          +1  
ClassA* objA = [[ClassA alloc] init];
ClassA* objB = [objA retain];
  : objB    ,  objA     ,         !
2.3       2.3.1         
             readonly,assign,retain copy;                 set get  ;
readonly  :    ,   ;
assign  :      ,    ,           ;
retain  :                          ,       ;
copy  :         ,           ,       ;
2.3.2               
          retain(  copy)     ,       release    ;           ;          ,    crash;   :
ClassA  strName NSString*             retain;
ClassA.strName = nil;  /*                 */
[ClassA.strName release]; /* strName           ,     crash */
Assign            (    ,   )      ;       ,             ;
             assign     ,            ;    crash;   :
ClassB* obj =[[[ClassB alloc] init] autorelease];
……
ClassA.strName = obj; /* strName   obj     */
     ClassA.strName   ,   obj autorelease ,  obj        ;        ,  crash;
3iOS  AutoRelease  3.1            
     iOS     ,                    ,                ,                     ……      iOS autorelease    ;      :
1:        ,         ,         :
1:    UITableView reuse  ;        cell  autorelease     alloc  ;   cell        ;
2:  cell        UIView,  UIView      ,  cell       ;
2:          ,       ;
         ,  iOS  API,      autorelease   buffer           ;     cache         ;
3:        SQLite,         ;
   SQLite         ,       buffer  ,   SQLite           ,    autorelease     51K   ;         ,           ,     !                buffer     ,     SQLite      ;             ;
3.2          
NSAutoreleasePool        (NSMutableArray),       autorelease     。         autorelease,                       。
ClassA *obj1 = [[[ClassA alloc] init] autorelease]; //retain count = 1,      autorelease pool 
NSAutoreleasePool        ,          ,release        。          retain count 1,  release  ,retain count 0,       。          retain count  1,  release  ,retain count  0,          ,    。
3.3              
AutoreleasePool        !
      ,        ,          pool      :
 
       ,       ,          ,         autorelease pool,               ;
3.4                
3.4.1            
●             Application Kit   ,       ,              ;         。
●            ,          ,                ;  ,       。
●          ,           ,                 ,               。                   。
3.4.2             
Application Kit        (       )   —        —           ,             .
4 iOS        
4.1      
       ,             ;
     autorelease  ,app crash;
     autorelease  ,app crash;
4.2       

    ,       ,      ,        !                  ;           retain,       ,    ,           ,        ,         ;
5 iOS         
  iOS         ,       ,          ,   Ram        ;             ,iOS            app,     app       app,     memory warning notice;  app  memory warning notice,              ;
5.1          
1: app        memory warning notice;
2: app         ;
3:      app    autorelease   ;
4: app           ,      viewdidload  ,view        ;    ;
5.2          
 Simulate            ;
iOS    ->    ->       ;
                        ,              app   crash  ;
6 iOS        
6.1        Analyze 
iOS             warning,      ,        logic    ;            Analyze     ,         bug;
        :
Potential Leak of an object allocated on line ……
        :
The left operand of …… is a garbage value;
        :
Reference-Counted object is used after it is released;
         ,         ,         !
6.2       
6.2.1         —Leak 
Leak                  ,            ,          ,          ,     ;  Leak            autorelease          ;                 ,  autorelease      ;
Leak  :

  Leak                ,                     :

6.2.2         —Allocations 
Allocations                  ,                   ,                     ,       ,                        ;
 
                ,           ;                             ;                ,         ;