xCode 4.5 でメモリ リークを見つけ、Leaks インストゥルメントを使用するための最初のステップを実行しています。いくつかの問題を見つけて修正したように見えましたが、これは私にはわかりません。
コードは次のとおりです。
RUBEImageInfo* imgInfo = [[[RUBEImageInfo alloc] init] autorelease];
NSString *nm = [NSString stringWithUTF8String:img->name.c_str()];
imgInfo->name = nm;
[imgInfo->name retain]; // I'm using it outside of this method
Leaks は 2 行目にリークを報告します。「i」の横のパーセンテージは %100 です。
そこで、次の 2 つのことを試しました。
nm
1つは、次のようにautohrleasでマークしました。
NSString *nm = [[NSString stringWithUTF8String:img->name.c_str()] autorelease];
nm
2 つ目は、割り当て後にrelease を呼び出してみたimgInfo->name
ので、コードは次のようになります。
imgInfo->name = nm;
[imgInfo->name retain];
[nm release];
しかし、どちらの場合も、実行するとアプリが BAD_ACCESS でクラッシュし、[imgInfo->name UTF8String]
.
私は何が欠けていますか?
ロブの答えに続いて編集:
これは RUBEImageInfo クラスです。
#import "cocos2d.h"
@interface RUBEImageInfo : NSObject {
@public CCSprite* sprite; // the image
@public NSString* name; // the file the image was loaded from
@public class b2Body* body; // the body this image is attached to (can be NULL)
@public float scale; // a scale of 1 means the image is 1 physics unit high
@public float angle; // 'local angle' - relative to the angle of the body
@public CGPoint center; // 'local center' - relative to the position of the body
@public float opacity; // 0 - 1
@public bool flip; // horizontal flip
@public int colorTint[4]; // 0 - 255 RGBA values
}
@end
そして.m:
#import "RUBEImageInfo.h"
@implementation RUBEImageInfo
// Nothing much to see here. Just make sure the body starts as NULL.
-(id)init
{
if( (self=[super init])) {
body = NULL;
}
return self;
}
-(void) dealloc {
[name release];
[super dealloc];
}
@end