我正在包装box2d库,我想在包装器解除分配时正确释放b2World指针。我的问题是,我应该覆盖目标c中的-dealloc方法,还是ARC自动解除分配c ++ *世界指针?
#import "World.h"
#import "Box2D.h"
@interface World()
@property b2World* world;
@end
@implementation World
@synthesize world;
-(void) createWorld:(Vec2*) gravity{
b2Vec2 g(gravity.x, gravity.y);
world = new b2World(g);
}
-(void) dealloc{
delete world;
world = nil;
NSString *temp = @"World DEALLOCATED!!";
NSLog(@"%@", temp);
}
我是否正确实施 - (void)dealloc还是没有必要这样做?
答案 0 :(得分:1)
我建议阅读这篇文章。他经历了一些陷阱和一些典型的实践来帮助理解这个:
http://coherent-labs.com/blog/objective-c-arc-gotchas/
基本上:似乎ARC只管理符合Obj-C引用计数结构的对象。 C ++对象没有使用Obj-C对象使用的相同分配方法分配,因此C ++对象没有引用计数,因此ARC不管理它们。
答案 1 :(得分:1)
ARC不会自动计算对c ++指针的引用。您确实正确实施了dealloc
,但在调用world
之前,您可能需要检查以确保0
不是delete
。