自动释放池外的NSString alloc会造成神秘的内存泄漏吗?

1 memory-management objective-c autorelease nsstring dealloc

手动分配和释放内存时,在运行时会产生以下错误:

objc[10430]: Object 0x109014b60 of class __NSCFData autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Run Code Online (Sandbox Code Playgroud)

我搜索了互联网,但通常这些错误是由于没有释放内存或使用自动释放的短线引起的...我找不到任何未发布的内存,我也没有使用自动释放的速记...希望你能帮忙!

我的代码是:

#import "try.h"

@implementation try

- (try*)initWithSwing
{
    self = [super init];
    if (self) {
        [self tellAboutSwing:YES];
    }

    return self;
}

- (void) tellAboutSwing: (BOOL) swing {

    NSString *s = [[NSString alloc] initWithFormat: @"%@ %@", @"Do we have a swing on our playground?", (swing ? @"Yes" : @"No")];


    // cast to a char
    const char *c = [s UTF8String];
    [s release];    
    printf("%s", c);

}

- (void) dealloc {
    printf( "Deallocing Playground\n" );
    [super dealloc];
}

int main(void) {
    try *t;
    t = [[try alloc] initWithSwing];
    [t release];
}

@end
Run Code Online (Sandbox Code Playgroud)

在实例方法中放置一个自动释放池可以解决问题,但这不是必需的NSString alloc.虽然我是Objective-C的新手,但我认为我已经掌握了拥有和释放变量的概念,但我在这里找不到我的错误.

这是我的.h文件:

#include <Foundation/Foundation.h>


@interface try : NSObject
- (void) tellAboutSwing: (BOOL) swing;
@end
Run Code Online (Sandbox Code Playgroud)

帮助将不胜感激:)

问候,

罗伯特

Wev*_*vah 5

IIRC -[NSString UTF8String]使用自动释放NSData来实际保存UTF-8 C字符串的字节.

更新:这是一个使用C函数的简单方法:

- (void) tellAboutSwing: (BOOL) swing {    
    printf("%s %s", "Do we have a swing on our playground?", (swing ? "Yes" : "No"));
}
Run Code Online (Sandbox Code Playgroud)