__NSAutoreleaseNoPool(): Object 0... of class NSCFString autorel

久々に Objective-C. 細かな所は完全に抜けてたけど、うろ覚えで書くとエラーが...

__NSAutoreleaseNoPool(): Object 0x1001102e0 of class NSCFString autoreleased with no pool in place - just leaking
...
#include <Foundation/Foundation.h>

void arrEx()
{
  NSArray *arr = [[NSArray alloc] initWithObjects:@"a,",@"b",@"c",nil];
  NSLog(@"arr: %@", [arr description]);
  [arr release];
}

int main(int argc, char *argv[])
{
  NSLog(@"Hello !");
  arrEx();
  return 0;
}

メッセージの数、出方から arr の要素に関連しているのは間違いないだろう。NSAutoRelasePool を使えば解決なんだけど、参照カウンティングのやり方もきっちり押さえとかないとと少し粘ってみたが、なかなか消えてくれない物だ。もう一度、本読み直そうか。

#include <Foundation/Foundation.h>

void arrEx()
{
  //NSArray *arr = [[NSArray alloc] initWithObjects:@"a,",@"b",@"c",nil];
  //NSArray *arr = [[NSArray alloc] initWithObjects:@"a,",nil];
  NSArray *arr = [[NSArray alloc] initWithObjects:nil];
  NSLog(@"arr: %@", [arr description]);
  int i;
  for (i = 0; i < [arr count]; i++) {
    [[arr objectAtIndex:i] release];
  }
#if 0
  NSEnumerator *e = [arr objectEnumerator];
  id object;
  while (object = [e nextObject]) {
    [object release];
  }
#endif
  [arr release];
}

int main(int argc, char *argv[])
{
  NSLog(@"Hello !");
  arrEx();
  return 0;
}