目标C中的链接列表问题

时间:2014-04-15 19:24:54

标签: ios objective-c ios7

我正在尝试添加一个节点,但头部是零。知道发生了什么事吗?

I have this picture of the debug process.

[请注意,这是一个带有大小的链接列表的实现,不要让你感到困惑!]

Node.h

//literally contains no other code and the .m file is empty, all I want
//is a pointer to the next object
@interface Node : NSObject
@property (nonatomic, weak, readwrite) Node *next;
@end

NList.m - 省略.h因为我认为它应该没问题

@interface NList()
@property (weak, nonatomic, readwrite) Node *head;
@property (nonatomic,readwrite) NSInteger size;
@property (nonatomic) NSInteger num_nodes;
@end

...


- (id) initWithSize:(NSInteger)size {
    self = [super init];
    if (self){
        self.head = nil;
        self.size = size;
        self.num_nodes = 0;
    }
    return self;
}

- (void)add:(NSObject *)node {
    Node *newNode = [[Node alloc] init];
    if (self.head){
        newNode.next = self.head;
        self.head = newNode;
    }
    else{
        self.head = newNode;
    }
    self.num_nodes++;
}

测试文件

- (void)testAdd
{
    NList *testList = [[NList alloc] initWithSize:2];
    NSObject *testNodeOne =  @1;
    [testList add:(testNodeOne)];
    XCTAssertNotNil(testList.head);
    NSObject *testNodeTwo =  @3;

    [testList add:testNodeTwo];
    XCTAssertNotNil(testList.head);
    //XCTAssertNotNil(testList.head.next);

}

1 个答案:

答案 0 :(得分:3)

为什么节点的属性很弱?根据你在这里展示的内容,他们应该很强大。列表本身应保留根节点(head),列表中的每个节点都应保留下一个节点,否则其他任何节点都不会保留这些节点。

另外,作为附注,在查看您的属性时,我认为您在查看readwritereadonly时混淆了默认值。 readwrite是默认值,不需要明确指定。需要为任何不应具有mutator的属性显式指定readonly。你似乎在你的房产中倒退了。