当为UITableView使用property / synthesize时,UIButton等应该自包含在该变量的方法调用中吗?以UITableView为例,[self.myTableView visibleCells]
和[myTableView visibleCells]
之间有区别吗?或者说[self.myImage setImage:...]
和[myImage setImage:...]
?
我见过使用self(Bubble Level)的Apple代码以及不使用self的“开始iPhone开发”一书中的示例。我想更好地理解这一点,特别是因为在我的UIScrollView方法调用中使用self导致了不稳定/错误的滚动行为。感谢。
答案 0 :(得分:2)
使用self.myTableView
是另一种说法[self myTableView]
的方式(如果在分配语句中使用,它也可以是[self setMyTableView:...];
)。换句话说,你正在执行一个方法。
使用myTableView
直接访问实例变量。
就个人而言,我通常更喜欢使用前一种方法,因为它通常可以让我免于手动管理内存并让我获得KVO通知的好处。但是,额外的方法调用存在微不足道的开销,您可能希望避免这种情况。
您选择使用哪种风格取决于您,每种方式都有其优点和缺点。
答案 1 :(得分:0)
差异取决于您如何定义属性。例如,假设您有以下内容:
@interface MyObject : NSObject {
NSObject *memberVariable;
}
@property (nonatomic, retain) NSObject *memberVariable;
@end
@implementation MyObject
@synthesize memberVariable;
@end
指定(nonatomic, retain)
实际告诉@synthesize
如何创建getter和setter方法。指定retain
会导致setter方法在我传递给它的对象上调用retain
。因此,self.memberVariable = someOtherObject
相当于memberVariable = [someOtherObject retain];
如果您在属性定义中指定了retain,那么这也是您永远不应该执行self.memberVariable = [[NSObject alloc] init];
的原因。 alloc
将保留计数初始化为1,将对象传递给setter方法会将保留计数增加到2.
答案 2 :(得分:0)
这取决于您的访问者方法是否具有自定义行为,在这种情况下,您始终希望从类中调用访问者,以及是否要确保生成KVO通知。如果您正在使用库存访问器(例如,合成)并且它不会影响直接从类中访问实例变量的任何内容,那么您将自己保存一个方法调用。