Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 同名对象,这是什么意思?_Objective C - Fatal编程技术网

Objective c 同名对象,这是什么意思?

Objective c 同名对象,这是什么意思?,objective-c,Objective C,我以为我对物体有很好的理解,但我想不是。当两个对象的名称相同时会发生什么情况?它们都指向内存中的同一位置?如果我有一节课说: SomeClass *someObject = [SomeClass new]; someObject.text = @"test"; 另一个类用相同的名称实例化相同的对象: SomeClass *someObject = [SomeClass new]; someObject.textColor = [UIColor redColor]; 这会将同一个对象修改为红色

我以为我对物体有很好的理解,但我想不是。当两个对象的名称相同时会发生什么情况?它们都指向内存中的同一位置?如果我有一节课说:

SomeClass *someObject = [SomeClass new];
someObject.text = @"test";
另一个类用相同的名称实例化相同的对象:

SomeClass *someObject = [SomeClass new];
someObject.textColor = [UIColor redColor];
这会将同一个对象修改为红色文本,上面写着“test”,对吗

谢谢!
~ru毯嘶嘶作响

没有。仅仅因为两个变量恰好共享相同的名称并不意味着它们共享相同的内存位置。编译时,编译器会去除变量名(而不是类名),并计算内存偏移量和消息,而不是名称和类。此外,作为一个局部变量,一旦它们超出范围(很可能是在创建它们的每个函数的末尾),它们将立即被销毁。

不,你不能这样做。 任何现代的编译器在编译代码之前都会试图扼杀你——正是因为这个原因:它不知道该做什么


即使您可以让编译器使其工作,仅仅因为两个对象具有相同的名称并不意味着它们具有相同的内存地址。

不,这两个指针指向内存中的两个不同对象。他们的名字是否相同并不重要。它们分别在两个不同的类中分配和初始化

顺便说一句,您不应该使用新方法来分配和初始化对象。不鼓励使用新消息,因为分配和初始化是两个不同的过程。您应该改为使用此选项:

SomeClass *someObject = [[SomeClass alloc] init];

你能解释一下你这样做的意思吗?它会把同一个对象修改成一个红色的文本,上面写着“test”,对吗?
text
textColor
有不同的类型…无论如何,不,你不能这样做。当你尝试它时发生了什么?编译器会抱怨什么?这是法律代码,只是与Fizz期望的行为不同。@andyvn22好吧,编译器不知道要修改哪个对象。因此,我的Xcode副本中出现了一个错误。“…另一个类实例化了…”这两个
someObject
s不在同一范围内。您能否为
+new
被弃用的断言提供引用?它在标题或文档中没有这样标记,并且工作正常(只要您不需要特殊的
initWithFoo:
initializer)。Deprecated有点强,“dis劝阻”更准确。