Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
Iphone 调用@property访问器?_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 调用@property访问器?

Iphone 调用@property访问器?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我想知道是否有人能解释一下,这两种方法都是一样的吗?由于两者都调用“setSeparatorColor”,我猜它们都在调用属性的访问器 [myTableView setSeparatorColor:[UIColor orangeColor]]; 加里。没错,他们都在做同样的事 [myTableView setSeparatorColor:[UIColor orangeColor]]; 是直接访问变量,其中 [[self myTableView] setSeparatorColor:[UIC

我想知道是否有人能解释一下,这两种方法都是一样的吗?由于两者都调用“setSeparatorColor”,我猜它们都在调用属性的访问器

[myTableView setSeparatorColor:[UIColor orangeColor]];


加里。

没错,他们都在做同样的事

[myTableView setSeparatorColor:[UIColor orangeColor]];
是直接访问变量,其中

[[self myTableView] setSeparatorColor:[UIColor orangeColor]];
调用属性的访问器,然后向其发送
setSeparatorColor
消息

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

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

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


不,它们不一样。第一个直接访问实例变量。
[[self myTableView] setSeparatorColor:[UIColor orangeColor]];
// 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;