所以我希望有多个连接的节点。每个节点都有传出和传入连接。但是虽然我使用ARC,但NSMutableArrays正在创建泄漏。如何才能正确释放对象?我已经在使用autoreleasepool了。
目前的代码是:
@interface TestObj()
@property(strong) NSMutableArray *incoming;
@property(strong) NSMutableArray *outgoing;
@end
@implementation TestObj
@synthesize incoming,outgoing;
- (id)init
{
self = [super init];
if (self) {
incoming = [NSMutableArray array];
outgoing = [NSMutableArray array];
}
return self;
}
-(void)addIncoming:(TestObj *)incomingN {
if([incoming indexOfObject:incomingN] == NSNotFound) {
[incoming addObject:incomingN];
[incomingN addOutgoing:self];
}
}
-(void)addOutgoing:(TestObj *)outgoingN {
if([outgoing indexOfObject:outgoingN] == NSNotFound) {
[outgoing addObject:outgoingN];
[outgoingN addIncoming:self];
}
}
答案 0 :(得分:3)
使用ARC,与iOS上的手动内存管理一样,您需要避免保留周期。如果你有一个保留第二个的对象,而第二个保留第一个,那么即使没有其他任何东西引用它们,这两个也永远不会被释放,所以你有内存泄漏。
你需要这样做,这样你才不会像这样引用它们。 NSArray
和NSMutableArray
保留对其他对象的强引用。您可以执行以下操作来创建可以在数组中编写故事的弱引用:
NSValue *val = [NSValue valueWithNonretainedObject:object];
如果在数组中存储val
,它将没有对该对象的强引用,因此可以取消分配。但是,您必须要小心,您不会创建某些对象没有强引用的情况,或者在您希望它们之前将其取消分配。
答案 1 :(得分:0)
这可能听起来很基本,但是尝试将它们设置为nil
?