Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 弧双向关系_Ios_Objective C_Cocoa_Automatic Ref Counting - Fatal编程技术网

Ios 弧双向关系

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

所以我希望有多个连接的节点。每个节点都有传出和传入连接。但是NSMutableArray正在产生泄漏,尽管我使用的是ARC。如何才能正确释放对象?我已经在用自动释放池了。

到目前为止,守则是:

@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
存储在数组中,它将不会对对象具有强引用,因此可以取消分配该对象。但是,您必须小心,不要造成某些对象没有强引用的情况,否则它们将在您希望之前被解除分配。

回答得很好。另外一点:由于您了解保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。回答得很好。另外一点:由于您了解保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。回答得很好。另外一点:由于您了解保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。回答得很好。另外一点:由于您知道保留周期,您也可以稍后通过删除强引用(例如,从数组中删除对象)来解决此问题。