【问题标题】:Obj-C - Can we point to the object whose parameter is being modifiedObj-C - 我们可以指向正在修改其参数的对象吗
【发布时间】:2023-11-02 03:52:01
【问题描述】:

ActionScript 你可以这样做:

character.x = character.width;
character.y = character.height;

或者你可以简单地这样做:

character.x = this.width;//`this` automagically == `character` in Actionscript (or whichever object is being modified. `this` just points to the current object being modified, it's a built in global dynamic variable)
character.y = this.height;

其中this 是一个动态变量,它仅指向正在编辑参数的对象(在本例中为xy)。

..

objectA.property1 = objectA.property2;

完全一样

objectA.property1 = this.property2;

因为this 是一个动态的面向对象的变量,它指向被自动修改的对象。


Objective-C 中有 this 这样的东西吗?

好处是允许我使用 #define 使用 clang 创建快捷方式。

例如,现在我可能想要一个 CLANG (NOT Obj-C) 快捷方式来使对象在其父视图中居中:

#define centerInSuperview center = CGPointMake(this.superview.frame.size.width/2.0f, this.superview.frame.size.height/2.0f)

那我可以说

object1.centerInSuperview;

可以这样说:

object1.center = CGPointMake(this.superview.frame.size.width/2.0f, this.superview.frame.size.height/2.0f);

除了this 不是 Obj-c 中的东西,所以我需要其他东西来指向正在修改的对象,以便我可以制作 CLANG 快捷方式。

【问题讨论】:

  • 我认为您不了解 this 在 ActionScript 中的工作原理。
  • Objective-C 中 this 的等价物是 self,但如果您曾经费心阅读初学者的 Objective-C 教程,就会知道这一点。
  • 按照我的理解,他不希望this 表示self,他希望它表示character
  • @TheParamagneticCroissant 这太粗鲁了。我从来没有在这个网站上遇到过像你这样顽固的人,我已经在 Objective-c 中编码了 6 年,这是非常没有必要的。我不是在谈论self。假设我在一个视图控制器中,我有一个像 UIView 这样的对象,我正在修改它的 .center 值,我可以在代码行中引用它(UIView)而不重复它的名称,而是只是说类似this
  • @jtbandes 绝对是this 在 ActionScript 中的工作原理,我已经用这种语言编码了 10 多年。

标签: ios objective-c xcode this dynamic-variables


【解决方案1】:

根据您的描述,character 似乎有 X、Y、宽度和高度,这在 Objective C 中只不过是 CGRect。如果是这样,那么它是一个结构,您可以按照您在问题

但是,从问题的标题来看,您似乎想知道在 Objective C 中,我们是否可以在修改同一对象时访问对象的参数。好吧,这取决于,如果您只是从单线程更改对象的属性,您可以这样做。因此,self.property1 = self.property2(从类内修改)或character.property1 = character.property2(从类外修改)是允许操作的。

但是,如果您谈论多线程,那么默认情况下对象不是线程安全的。当一个线程正在更新它时,另一个线程不应访问它。它也可能崩溃。

【讨论】:

  • 对不起,我更多的是寻找一种方法来引用正在编辑的对象而不使用对象名称本身。所以我不想说character.property1 = character.property2。我想说character.property1 = this.property2 其中this 成为具有被修改或设置属性的对象。
  • 这不是它在 Objective C 中的工作方式。您可能需要阅读 Apple 文档。
  • 我知道它不是这样工作的?这就是为什么我在这里问这个问题,看看是否有办法做到这一点哈哈。我想知道Objective-c是否有dynamic object oriented variables