请注意,这篇文章已经过时了!
这篇文章是过去十年的。
请务必阅读下面的重要脚注,干杯!!
当你刚刚开始的时候,真的很难理解这一切。
这里有一些简单实用的经验法则适合初学者。
重复一遍,这篇文章适合初学者。
这里的目的是让您快速从起跑线开始,在大多数情况下都能自信地使用系统。
稍后,您可以真正了解这些问题的内部运作。
(1) 永远不要说name=@"hello"。 总是说 self.name=@"hello"。在项目范围内搜索 name 并确保在设置或更改时始终使用 self.name 而不是 name。
(2) 你知道所有关于内存管理、初始化、释放等令人生气的东西。如果您使用 self thingy,它会为您处理所有这些。很酷吧?
(3) self thingy 特别有用,因为您可以轻松“更改”字符串(或其他任何内容)。所以,这样做完全没问题,
self.name=@"aa";
self.name=@"bb";
self.name=@"cc";
而(总而言之)无论出于何种原因,您永远都不能这样做...
name=@"aa";
name=@"bb";
name=@"cc";
( * ) 关于你的字面问题,“请解释name = @"hello" 和self.name = @"hello"?" 之间的区别,这很容易做到。
第一个是只是设置一个变量。你知道的,就像过去我们 13 岁时生活简单的 "x=42"。
第二个完全不同,特别是它调用一个复杂的例程(称为“setter”)为你做很多令人惊奇的事情。
这就是你问题的字面答案。 第一个只是设置变量(别忘了,其中涉及到很多指针和其他奇怪的东西,通常你当然不能只是像那样随意设置指针)。 第二个实际上调用了一个大而复杂的例程,因此为您做了很多事情。
再一次,第二个就像在说……
[name bigComplicatedRoutineHere:@"hello"];
...始终记住语法self. ... 实际上是调用例程非常有帮助。
确实,当他们将这种self.X 语法引入到[X complicatedThingHere] 时,该主题的一些思想家认为这是一个愚蠢的想法。这会带来很多困惑,并且每个初学者都会确切地问你在问什么。
就我个人而言,我花了九年多的时间才把这一点弄清楚。 :-) 所以,我再次强调,你必须记住,当你说self.x 时,实际上,你实际上是在调用一个例程。
重复一遍:“自点”语法实际上调用了一个例程。 (事实上,我相信其中一个预处理器只是将其扩展为[x amazingStuffHere]。)
我试图以一种能让您继续前进并允许您在学习内存管理、属性等的同时推进和使用更多功能的方式来回答。如果你比这篇文章更高级,请忽略它。
请注意,这篇文章旨在为初学者提供建议,让他们继续前进,不要被激怒。希望对您有所帮助!
2014 年更新! ARC 初学者注意事项...
注意,这篇文章已经 5 岁了了!它已被成千上万的初学者阅读,并且有许多后续问题等。请注意,今天在新的“ARC世界”中。在某种程度上:如果你是初学者:你应该只使用!!属性。即,随时随地使用“self.whatever”。无论如何,请注意,这篇文章中的信息“很大程度上是历史性的”,而且每天都在变得越来越重要。当然,不用说,一旦您成为专家,您将需要并且将了解这一切的每一个微妙细节。希望它可以帮助某人。