通过编写自己的setter方法来了解属性

时间:2011-06-09 16:47:04

标签: iphone objective-c properties

所以我遇到了OOAD,属性,self关键字等问题。我想创建一个具有UITableView的简单测试项目。

我有一个ivar
NSArray *tableData;

我如何为此编写setter和getter方法?我以为我的二传手看起来像是:

- (void)setTableData:(NSArray *)array {
    [tableData autorelease];
    tableData = [array retain];
}

然后当我尝试在viewDidLoad中使用此方法时,我意识到我需要创建一个ViewController的实例。当我看到它们在为NSArray创建属性的书籍中如何完成时,这似乎是不该做的,然后在viewDidLoad中做一个

NSArray *array = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil];
    self.tableData = array;
[array release];

我只是想了解幕后发生的事情,尝试理解OOAD原则,ivars,属性,自我等等。先谢谢。

1 个答案:

答案 0 :(得分:1)

我相信你已经知道使用@synthesize会为你创建setter / getter方法,但是要了解这些概念,我们知道发生了什么事情。

就一个setter方法来说,你可能会更喜欢这样的东西:

- (void)setTableData:(NSArray *)array {
    if (tableData != array) {
        [tableData release];
        tableData = [array retain];
    }
}

这基本上会检查以确保新阵列实际上与当前不同。如果是,则释放旧实例并设置新实例。

对于getter方法,只需使用:

- (NSArray *)tableData (
    return tableData;
}

可以通过拨打self.tableData来访问。当然,使用self.tableData = array;

完成设置数组的工作

我希望有所帮助。如果您需要更多信息,请说明,我将很乐意尝试进一步解释