gpt4 book ai didi

iphone - self.ivar 和 ivar 的区别?

转载 作者:IT老高 更新时间:2023-10-28 11:44:40 28 4
gpt4 key购买 nike

aclass.h

@interface aClass : NSObject {
NSString *name;
}

@property (nonatomic, retain) IBOutlet NSString *name;

@end
aclass.m 

@implementation aClass

@synthesize name;

- (void)dealloc {
[name release];
[super dealloc];
}

- (void)test1 {
name = @"hello";
}

- (void)test2 {
self.name = @"hello";
}

以上面为例。有人可以解释一下 name = @"hello" 之间的区别吗?和 self.name = @"hello" ?谢谢!

编辑:后续问题: How to write my own setter for an ivar, i.e.: self.ivar = ...?

最佳答案

请注意,这篇文章已经过时了!
这篇文章是前十年的。
请务必阅读下面的重要脚注,干杯!!

当你刚刚开始时,真的很难理解这一切。
以下是一些简单实用的经验法则 初学者 .
重复一遍,这篇文章是 初学者 .
这里的目的是让您从起跑线开始,在大多数情况下都能自信地使用系统。
以后 ,您可以真正了解这些问题的内部运作方式。
(1) 永远不要说 name=@"hello" . 常说 self.name=@"hello" .在项目范围内搜索 name并确保您总是说 self.name而不是 name ,当您设置或更改它时。
(2) 你知道所有关于内存管理、初始化、释放等令人恼火的事情。如果您使用 self 东西,它会为您处理一切 .酷吧?
(3) self thingy 特别有用,因为你可以轻松“更改”字符串 (或其他任何东西)随着您的进行。所以,这样做完全没问题,

self.name=@"aa";  
self.name=@"bb";
self.name=@"cc";
而(一句话) 您永远不能以任何理由这样做 ...
name=@"aa";
name=@"bb";
name=@"cc";
( * ) 关于你的字面问题,“请解释 name = @"hello"self.name = @"hello"?" 之间的区别,这很容易做到。
第一个是 只需设置一个变量 .你知道的,就像 "x=42"在过去,生活很简单,我们只有 13 岁。
第二个完全不同,具体是 它正在调用一个复杂的例程 (被称为“二传手”)为你做很多令人惊奇的事情。
所以这就是你问题的字面答案。 第一个只是设置变量 (不要忘记,这里涉及到很多指针和其他奇怪的东西,而且通常情况下,您肯定 不能 只是随意地设置指针)。 第二个实际上调用了一个很大的复杂例程因此为你做了很多事情。
再一次,第二个就像说......
[name bigComplicatedRoutineHere:@"hello"];
...始终记住语法 self. ... 非常有帮助。 字面意思是调用例程 .
确实,该主题的一些思想家在介绍 self.X 时认为这是一个愚蠢的想法。语法表示 [X complicatedThingHere] .它引入了很多困惑,和 每个初学者都会问你在问什么 .
就我个人而言,我花了九年多的时间才在我的脑海中弄清楚这一点。 :-) 所以我再次强调,当你说 self.x 时,你必须记住这一点。 ,事实上, 你实际上是在调用一个例程 .
重复一遍:“自点”语法实际上调用了一个例程。 (确实,我相信其中一个预处理器只是将其扩展为 [x amazingStuffHere] 。)
我试图以一种能让您继续前进并允许您推进和使用更多功能的方式来回答,同时您还可以了解内存管理、属性等。如果你比这篇文章更高级,请忽略它。
请注意,这篇文章旨在为初学者提供建议 启用它们 继续前进,不要被激怒 .希望能帮助到你!

2014年更新!初学者关于 ARC 的重要说明......
注意,这个帖子是 五岁 现在!它已被成千上万的初学者阅读,并且有许多后续问题等。请注意,今天在新的“ARC 世界”中。在某种程度上:如果您是初学者:您应该几乎 只用!! 特性。即,随时随地使用“self.whatever”。无论如何,请注意这篇文章中的信息“主要是历史性的”,并且每天都在变得越来越重要。当然,不言而喻,一旦您成为专家,您将需要并且将会理解这一切的每一个微妙细节。希望它可以帮助某人。

关于iphone - self.ivar 和 ivar 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142177/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com