は次のエラーを手動で割り当てて、メモリを解放したときに、実行時に生成されますNSString alloc autorelease poolの外で、不思議なメモリリークが発生する?
objc[10430]: Object 0x109014b60 of class __NSCFData autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
私はインターネットを検索するが、通常、これらのエラーは、メモリを解放するか、自動解放速記を使用していないことが原因で発生している...私は、任意の未発表のメモリを見つけることができません私はオートレリースの略語を使っていません...あなたが手伝ってくれることを願っています!
私のコードは次のとおりです。インスタンスメソッド内で自動解放プールを置く
#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
問題を修正し、それはNSString alloc
を必要はありません。私はObjective-Cの新機能ですが、変数の所有と解放の概念を把握していると思いますが、ここでエラーを見つけるのは難しいです。
ここに私の.hファイルです:
#include <Foundation/Foundation.h>
@interface try : NSObject
- (void) tellAboutSwing: (BOOL) swing;
@end
ヘルプをいただければ幸いです:)
よろしく、
ロバート
*あなたがautoreleaseを使用していないという理由だけで、*フレームワーク*はそうではありません。 NSStringクラスは、望むときはいつでも(所有している限り)、必要なものを自動で解放することができます。これは、objective-cを使用するときに常にオートリリースプールを持つことになっている理由です。 – ughoavgfhw
私はこれが当てはまるとは思わなかった。私は確かに上記のメッセージを持っていますが、それはいつも明白な原因によるものです。この場合、UTF8String呼び出しが原因である可能性があります。 –