Ios 弧双向关系
所以我希望有多个连接的节点。每个节点都有传出和传入连接。但是NSMutableArray正在产生泄漏,尽管我使用的是ARC。如何才能正确释放对象?我已经在用自动释放池了。 到目前为止,守则是:Ios 弧双向关系,ios,objective-c,cocoa,automatic-ref-counting,Ios,Objective C,Cocoa,Automatic Ref Counting,所以我希望有多个连接的节点。每个节点都有传出和传入连接。但是NSMutableArray正在产生泄漏,尽管我使用的是ARC。如何才能正确释放对象?我已经在用自动释放池了。 到目前为止,守则是: @interface TestObj() @property(strong) NSMutableArray *incoming; @property(strong) NSMutableArray *outgoing; @end @implementation TestObj @synthesize i
@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];
}
}
嗯,这听起来可能很基本,但试过将它们设置为
nil
?这听起来可能很基本,但试过将它们设置为nil
?这听起来可能很基本,但试过将它们设置为nil
?这听起来可能很基本,但试过将它们设置为nil
?,与iOS上的手动内存管理一样,您需要避免保留周期。如果有一个对象保留第二个对象,而第二个对象保留第一个对象,那么即使没有其他对象引用它们,这两个对象也永远不会被释放,因此存在内存泄漏
您需要这样做,以免像这样引用它们NSArray
和NSMutableArray
保留对其他对象的强引用。您可以执行以下操作来创建一个弱引用,您可以在数组中描述它:
NSValue *val = [NSValue valueWithNonretainedObject:object];
如果将
val
存储在数组中,它将不会对对象具有强引用,因此可以取消分配该对象。但是,您必须小心,不要造成某些对象没有强引用的情况,否则它们将在您希望之前被解除分配。与iOS上的手动内存管理一样,使用ARC时,您需要避免保留周期。如果有一个对象保留第二个对象,而第二个对象保留第一个对象,那么即使没有其他对象引用它们,这两个对象也永远不会被释放,因此存在内存泄漏
您需要这样做,以免像这样引用它们NSArray
和NSMutableArray
保留对其他对象的强引用。您可以执行以下操作来创建一个弱引用,您可以在数组中描述它:
NSValue *val = [NSValue valueWithNonretainedObject:object];
如果将
val
存储在数组中,它将不会对对象具有强引用,因此可以取消分配该对象。但是,您必须小心,不要造成某些对象没有强引用的情况,否则它们将在您希望之前被解除分配。与iOS上的手动内存管理一样,使用ARC时,您需要避免保留周期。如果有一个对象保留第二个对象,而第二个对象保留第一个对象,那么即使没有其他对象引用它们,这两个对象也永远不会被释放,因此存在内存泄漏
您需要这样做,以免像这样引用它们NSArray
和NSMutableArray
保留对其他对象的强引用。您可以执行以下操作来创建一个弱引用,您可以在数组中描述它:
NSValue *val = [NSValue valueWithNonretainedObject:object];
如果将
val
存储在数组中,它将不会对对象具有强引用,因此可以取消分配该对象。但是,您必须小心,不要造成某些对象没有强引用的情况,否则它们将在您希望之前被解除分配。与iOS上的手动内存管理一样,使用ARC时,您需要避免保留周期。如果有一个对象保留第二个对象,而第二个对象保留第一个对象,那么即使没有其他对象引用它们,这两个对象也永远不会被释放,因此存在内存泄漏
您需要这样做,以免像这样引用它们NSArray
和NSMutableArray
保留对其他对象的强引用。您可以执行以下操作来创建一个弱引用,您可以在数组中描述它:
NSValue *val = [NSValue valueWithNonretainedObject:object];
如果将
val
存储在数组中,它将不会对对象具有强引用,因此可以取消分配该对象。但是,您必须小心,不要造成某些对象没有强引用的情况,否则它们将在您希望之前被解除分配。回答得很好。另外一点:由于您了解保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。回答得很好。另外一点:由于您了解保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。回答得很好。另外一点:由于您了解保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。回答得很好。另外一点:由于您知道保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。