我正在尝试添加一个节点,但头部是零。知道发生了什么事吗?
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);
}
答案 0 :(得分:3)
为什么节点的属性很弱?根据你在这里展示的内容,他们应该很强大。列表本身应保留根节点(head),列表中的每个节点都应保留下一个节点,否则其他任何节点都不会保留这些节点。
另外,作为附注,在查看您的属性时,我认为您在查看readwrite
与readonly
时混淆了默认值。 readwrite
是默认值,不需要明确指定。需要为任何不应具有mutator的属性显式指定readonly
。你似乎在你的房产中倒退了。