Objective-cメモリオーバーフロー問題経験まとめ
5324 ワード
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 , , , , ;
, ; ; , ;