Your SlideShare is downloading. ×
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Autorelease pool
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Autorelease pool

392

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
392
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Autorelease PoolMichael Pan13年5月27⽇日星期⼀一
  • 2. 回傳新產⽣生的物件-(NSString *) name{NSString * name= [[NSString alloc]initWithString:@”Bob”];return name;}Memory leak!!!iOS 413年5月27⽇日星期⼀一
  • 3. 回傳新產⽣生的物件-(NSString *) name{NSString * name= [[NSString alloc]initWithString:@”Bob”];[name release]; // ??return name;}iOS 413年5月27⽇日星期⼀一
  • 4. 回傳新產⽣生的物件-(NSString *) name{NSString * name= [[NSString alloc]initWithString:@”Bob”];return name;[name release]; // ??}iOS 413年5月27⽇日星期⼀一
  • 5. 回傳新產⽣生的物件-(NSString *) name{NSString * name= [[NSString alloc]initWithString:@”Bob”];[name autorelease];return name;}NSString * outer = [customer name];[outer retain];//....[outer release];iOS 413年5月27⽇日星期⼀一
  • 6. 回傳新產⽣生的物件-(NSString *) name{NSString * name= [[NSString alloc]initWithString:@”Bob”];// [name autorelease];return name;}ARC13年5月27⽇日星期⼀一
  • 7. Name does matter• begin with alloc/new/copy/mutableCopy will not be putinto autorelease pool• others will add object into autorelease pool automatically-(id) newCar;13年5月27⽇日星期⼀一
  • 8. Demo• ARCDemo13年5月27⽇日星期⼀一
  • 9. Pool操作物件時機• 加⼊入• 使⽤用[obj autorelease]• 常數字串• class level constructor• 呼叫[obj release]• 當[pool drain]• event loop 結束autorelease pool 無法 retainNO Arc13年5月27⽇日星期⼀一
  • 10. ⾃自⾏行產⽣生Pool• NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];• 新增多個pool會以stack ⽅方式儲存• 物件呼叫 autorelease時會被加⼊入其最近的pool• 某個pool 呼叫 drain 之後,其上的pool 也都會被drainpool1pool2int main(){NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];}NO Arc13年5月27⽇日星期⼀一
  • 11. RecapNSMutableString * s1 = [[NSMutableString alloc] initWithString:@"hello"];NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];!NSArray * staticArray = [NSArray arrayWithObject:s1];NSLog(@"s1 retain count is %lu", [s1 retainCount]);[pool1 drain];NSLog(@"s1 retain count is %lu", [s1 retainCount]);Result is ?pool2pool1staticArrays1iOS 413年5月27⽇日星期⼀一
  • 12. ⾃自⾏行產⽣生Poolint main(){@autoreleasepool{//...}}iOS 513年5月27⽇日星期⼀一
  • 13. Clean pool nicelyint i;for (i = 0; i < 1000000; i++) {id object = [someArray objectAtIndex: i];NSString *desc = [object description];// and do something with the description}NSAutoreleasePool *pool;pool = [[NSAutoreleasePool alloc] init];int i;for (i = 0; i < 1000000; i++) {id object = [someArray objectAtIndex: i];NSString *desc = [object description];// and do something with the descriptionif (i % 1000 == 0) {[pool drain];pool = [[NSAutoreleasePool alloc] init];}}[pool release]iOS 413年5月27⽇日星期⼀一
  • 14. Clean pool nicelyint i;for (i = 0; i < 1000000; i++) {id object = [someArray objectAtIndex: i];NSString *desc = [object description];// and do something with the description}int i;for (i = 0; i < 1000000; i++) {@autoreleasepool{id object = [someArray objectAtIndex: i];NSString *desc = [object description];// and do something with the description}}iOS 513年5月27⽇日星期⼀一
  • 15. EqualNSAutoreleasePool *pool =[[NSAutoreleasePool alloc] init];[obj autorelease];[pool drain];@autoreleasepool{id __autoreleasing obj2;obj2 = obj;}ARCno ARC13年5月27⽇日星期⼀一

×