我只是对self在对象中扮演的角色感到好奇。我知道编写[[self dataForTable] count]直接引用该对象中包含的iVar。但是如果你错过了self而直接指定了iVar [dataTable count],这有什么不同,你用self来防止什么,仅仅是唯一地指定一个iVar,而不是一些类似的局部变量?
@implementation ViewController
@synthesize dataForTable;
...
NSUInteger dataCount = [[self dataForTable] count];非常感谢
加里。
发布于 2010-07-23 21:36:48
写入[self dataForTable count]并不直接引用iVar。有一些幕后的事情在进行...
如果你在代码中使用了ivar而不是self,那就是对ivar的直接访问。如果使用self someIvarName或self.someIvarName,实际上是在向对象(即self)发送一条消息。运行时尝试解析此消息,并将使用多种机制中的一种:如果您定义了一个具有匹配名称的方法,则将使用该方法,如果不存在此类方法(或属性),则键值编码将默认使用同名的ivar。
至于影响,这将根据您的代码而有所不同。例如,如果您的属性是保留属性(而不是已分配属性),则在以下属性之间存在非常显著的差异:
someVar = nil和
self.someVar = nil合成的设置器将在将someVar设置为nil之前正确地释放它,而在第一个示例中,您现在已经泄漏了内存。这只是其中一个不同的例子。
发布于 2010-07-23 21:38:00
[self foo]在self上调用-foo方法(不是iVar,实例方法)。
self.bar使用@property语法访问bar iVar,方法是在self上调用getter/setter方法(-bar和-setBar:)。
直接引用iVar而不使用“self”。(例如bar = @"some text")绕过getter/setter。如果设置器(例如)应该对新值执行copy或retain,那么这可能是一件坏事。
https://stackoverflow.com/questions/3318499
复制相似问题