代码之家  ›  专栏  ›  技术社区  ›  SmallChess

C++与Objut-C自动求解问题

  •  1
  • SmallChess  · 技术社区  · 14 年前

    我有三层,底层是用C++编写的,另外两个中间层和顶层都在Objtovi-C中。

    C++层在中间层存储对类的引用,中间层还存储对顶层中的类的引用。

    在接收到中间层的请求后,底层负责异步调用中间层中的方法,该方法反过来调用顶层中的方法。

    不幸的是,我的代码报告如下错误:

    * _ nsautoreleasenopool():对象0x523e50,属于nscfnumber autoreleated类,没有池存在-只是泄漏 烟囱:(0x95C83F0F 0x95B90442 0x28D3 0x2D42 0x95B96E0D 0x95B969B4 0x93A00155 0x93A00012)

    问题是顶层中的方法是从没有自动存储池的C++ POSIX线程调用的。我能想到的唯一解决方案是在中间层添加以下内容:

    bool temp = false;
    
    - (void) method ...
    {
      if (!temp)
      {
        temp = true;
        NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];    
      }
    
      call_to_the_top_layer();
    }
    

    这是可行的。我的问题是,还有其他更好的解决方案吗?这是丑陋的…

    2 回复  |  直到 14 年前
        1
  •  2
  •   Tilo Prütz    14 年前

    id pool = [[NSAutoreleasePool alloc] init];
    @try {
        …
    } @finally {
        [pool release];
    }
    

        2
  •  3
  •   DarkDust    14 年前

    - (void) method
    {
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
      // start doing some work, for example:
      call_to_the_top_layer();
    
      [pool release];
    }