BE AWARE, THIS POST IS OLD !
这篇文章来自前十年.
请务必阅读下面的重要脚注,干杯!!
当你刚刚开始的时候,真的很难理解这一切.
以下是一些简单实用的经验法则.
重复一下,这篇帖子是FOR BEGINNERS.
这里的目标是让你从起跑线上移动quickly步,在大多数情况下都能自信地使用该系统.
Later,你可以真正了解这些问题的内部运作.
(1) 永远不要说name=@"hello"
.Always say self.name=@"hello"
. 在整个项目范围内搜索name
,确保在设置或更改它时总是说self.name
而不是name
.
(2) 你知道所有关于内存管理、初始化、释放等令人愤怒的事情.如果你用的是self 思考,it takes care of all that for you.酷吧?
(3) self 思考是特别有用的,因为你可以在前进的过程中获得easily "change" the string(或任何东西).所以,这样做完全可以,
self.name=@"aa";
self.name=@"bb";
self.name=@"cc";
然而(一句话)you can never, ever, for any reason, do this...
name=@"aa";
name=@"bb";
name=@"cc";
(*)关于你的字面问题,"请解释name = @"hello"
和self.name = @"hello"?"
之间的区别这很容易做到.
第一个是just setting a variable.你知道,就像过go 的"x=42"
岁,那时生活很简单,我们才13岁.
第二个是完全不同的,特别是it is calling a complicated routine(被称为"塞特")为你做了很多令人惊讶的事情.
这就是你问题的字面答案.The first one just sets the variable(别忘了,这里有很多指针和其他奇怪的东西,通常你只是随意地设置指针).The second one actually calls a big complicated routine,因此为你做了很多事情.
再一次,第二个和说...
[name bigComplicatedRoutineHere:@"hello"];
...记住语法self. ...
is literally calling a routine是非常有帮助的.
事实上,一些关于这个话题的思想家认为,当他们把这self.X
个语法引入[X complicatedThingHere]
的意思时,这是一个愚蠢的 idea .它引入了很多困惑,并且.
就我个人而言,我花了九年多的时间才弄清楚这一点.:-)所以,我再次强调,你们必须记住,当你们说self.x
时,实际上是you are actually calling a routine.
重复:"self-dot"语法实际上调用了一个 routine .(事实上,我相信其中一个预处理器只是将其扩展到了[x amazingStuffHere]
.)
我试着用一种能让你继续前进的方式来回答这个问题,让你在学习内存管理、属性等知识的同时,能够提升和使用更多的功能.如果你比这篇文章更先进,就忽略它吧.
Please note that this post is meant to be advice for beginners来启用它们to keep going and not get infuriated.希望有帮助!
2014 update! Important Note on ARC for beginners ...
注意,这篇帖子现在已经five years old了!成千上万的初学者阅读了这本书,还有很多后续问题等.请注意,在今天这个新的"ARC世界".在某种程度上:如果你是一个初学者:你应该差不多only use!!个属性.也就是说,在任何时候、任何地方都要使用"self .无论什么".无论如何,请注意,这篇文章中的信息"基本上是历史性的",而且每天都在变得越来越重要.当然,不言而喻,一旦你成为一名专家,你将需要并且将理解这一切的每一个微妙细节.希望它能帮助别人.