温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

NSAutoreleasePool初始化语句必须是第一条执行语句

发布时间:2020-06-29 13:08:25 来源:网络 阅读:657 作者:心如明镜 栏目:开发技术

 

如果这样写:

  1. #include "say.h" 
  2. #include <Foundation/Foundation.h> 
  3.  
  4. int main(void)  
  5.         id speaker; 
  6.         NSString *name = @"GNUstep !"
  7.         NSAutoreleasePool *pool; 
  8.         NSArray           *outArray; 
  9.         NSArray                     *array2; 
  10.          
  11.         array2 = [NSMutableArray arrayWithCapacity:20]; 
  12.          
  13.         pool = [NSAutoreleasePool new]; 
  14.         speaker = [[Say alloc] init]; 
  15.         outArray = [NSArray arrayWithObjects: @"Msg1", @"Msg2", @"Msg3", @"Msg4", nil]; 
  16.         //printf("%@\n", [outArray objectAtIndex: 0]);      //GNUstep下只输出了@ 
  17.         //GSPrintf(stdout, "%@", [outArray objectAtIndex: 1]);  // GNUstep下崩溃 
  18.         NSLog(@"%@\n", [outArray objectAtIndex: 2]);                        // GNUStep下ok 
  19.          
  20.         [speaker sayHello]; 
  21.         [speaker sayHelloTo: name]; 
  22.          
  23.         RELEASE(speaker); 
  24.         RELEASE(pool); 
  25.          
  26.         #ifdef DEBUG 
  27.             NSLog(@"%@\n", @"Debug Now"); 
  28.         #endif 
  29.          
  30.         return 0; 

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 = [NSMutableArray arrayWithCapacity:20]; 放置到 pool = [NSAutoreleasePool new]; 之后,就没有问题了。

 

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI