NSAutoreleasePool初始化语句必须是第一条执行语句
如果这样写:
#include"say.h"#include<Foundation/Foundation.h>intmain(void){idspeaker;NSString*name=@"GNUstep!";NSAutoreleasePool*pool;NSArray*outArray;NSArray*array2;array2=[NSMutableArrayarrayWithCapacity:20];pool=[NSAutoreleasePoolnew];speaker=[[Sayalloc]init];outArray=[NSArrayarrayWithObjects:@"Msg1",@"Msg2",@"Msg3",@"Msg4",nil];//printf("%@\n",[outArrayobjectAtIndex:0]);//GNUstep下只输出了@//GSPrintf(stdout,"%@",[outArrayobjectAtIndex:1]);//GNUstep下崩溃NSLog(@"%@\n",[outArrayobjectAtIndex:2]);//GNUStep下ok[speakersayHello];[speakersayHelloTo:name];RELEASE(speaker);RELEASE(pool);#ifdefDEBUGNSLog(@"%@\n",@"DebugNow");#endifreturn0;}
array2 就不受内存池管控,执行时会报错:
$ ./obj/HelloWorld.exe
2013-03-15 15:20:57.015 HelloWorld[5372] autorelease called without pool for ob
ect (0x3eb2f8) of class GSMutableArray in thread <NSThread: 0x520878>
把array2=[NSMutableArrayarrayWithCapacity:20];放置到 pool=[NSAutoreleasePoolnew]; 之后,就没有问题了。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。