打电话给@property访问者?

时间:2010-07-30 09:20:42

标签: iphone objective-c cocoa-touch

我想知道是否有人可以解释以下内容,这些是否都在做同样的事情?由于两者都调用“setSeparatorColor”,我猜他们都会调用属性的访问者。

[myTableView setSeparatorColor:[UIColor orangeColor]];

[[self myTableView] setSeparatorColor:[UIColor orangeColor]];

加里。

2 个答案:

答案 0 :(得分:3)

不完全相同。

在第一个版本中,您使用某个类的实例变量 - myTableView

在第二个版本中,您使用由同名方法返回的值。在第一步调用当前类的方法- (..)myTableView;此方法返回一些值。在下一步 - 您使用返回对象的- (..)setSeparatorColor:..方法。当然,经常(当您使用@synthesize myTableView;或方法实现,如- (..)myTableView { return myTableView; })时,它与第一个版本中的变量相同,但它不是强制条件(取决于您的实现)。此外,- (..)myTableView;可能会产生一些副作用/做额外的工作 - 而不仅仅是返回一个值。

示例(myTableView和[self myTableView]可以不同,具体取决于某些条件):

// myClass.h
@interface myClass : UIViewController {
    UITableView *myTableView;
}
@property (nonatomic, retain) UITableView *myTableView;
@end;

// myClass.m
#import "myClass.h"

@implementation myClass

@dynamic myTableView;

- (UITableView *)myTableView {
    return (someConditionIsTrue) ? myTableView : nil;
}

- (void)setMyTableView:(UITableView *)value {
    if (myTableView != value) {
        [myTableView release];
        myTableView = [value retain];
    }
}

@end;

答案 1 :(得分:-1)

正确,他们都在做同样的事情

[myTableView setSeparatorColor:[UIColor orangeColor]];

直接访问变量,其中为

[[self myTableView] setSeparatorColor:[UIColor orangeColor]];

调用属性的访问者,然后向其发送setSeparatorColor消息