gpt4 book ai didi

ios - 一个对象的变化应该影响同一类的其他对象

转载 作者:行者123 更新时间:2023-11-29 13:16:57 26 4
gpt4 key购买 nike

目前我正在做一个 iOS 项目。其中我有两个从同一类派生的视觉上相似的对象。我想要的是当我对一个对象进行一些更改时需要在对象 2 中进行相同的更改。

详细说明:

我有一个类 MyClass 并且 obj1obj2 派生自 MyClass。当我对 obj1 执行某些操作时,它会调用 obj1 的相应委托(delegate)方法。现在我想要的是当obj1 调用它的委托(delegate)方法时,我还需要调用obj2 的委托(delegate)方法。同理:如果我更改 obj2,它会影响 obj1。以后我还需要添加更多元素。

我做了什么:

我添加了一个 Singleton 类并在其上放置了一个数组并将对象添加到其中。

在委托(delegate)方法中:

- (void)delegateMethod:(id)param
{
NSMutableArray *arr = [[MySingleTon sharedObject] getArray];
for(int loop = 0;loop<[arr count];loop++)
{
if(![arr objectAtIndex] == self)
{
[[arr objectAtIndex:loop] delegateMethod:param];
}
}
}

发生的事情是:

但问题是它会导致死循环。 Obj2 将做同样的事情,所有其他对象也做同样的事情。我被困在这里,我有大约 25 个委托(delegate)方法并且需要实现相同的功能。我无法通过添加额外参数来更改委托(delegate)方法。

有解决办法吗?请帮助我,在此先感谢。

为什么我需要这个/实际实现:

我创建了一个可以缩放/旋转等的自定义 View 。我创建了两个相同类的对象并将其添加到我的父 View 中。现在,当我在 View 1 上更改任何内容时,它应该更改 View 2 中的类似内容。我还需要添加更多 View 。

最佳答案

基本上,因为您想让两个不同的对象引用完全相同的状态,您应该将这两个对象指向第三个对象——可以是具有静态状态的基类或具有静态状态的第三种类型,或者是单例。这样做的好处是 Object1 不必了解 Object2,这意味着如果您添加了 Object3,则无需更改代码。

因此,只要您的对象写入共享状态,就可以读取新值。如果您希望对象在该更改时立即更改,那么您需要实现事件(我假设 iOS 已经实现)以便让 Object1 和 Object2 订阅共享状态的更改。

我不会 iOS,但会使用伪代码...

abstract class BaseClass {
protected static sharedArray = new sharedArray();

void someMethod(int i, int aNewValue) {
BaseClass.sharedArray[i] = aNewValue;
}

int getSharedValue(int i) {
return BaseClass.sharedArray[i];
}
}

class ObjectOne extends BaseClass {

}

class ObjectTwo extends BaseClass {

}

请注意这不是线程安全的并且有点糟糕,但它可能会为您指明正确的方向。如果您引用的状态由每个对象引用的单例持有,那将会更加整洁(但仍然不是线程安全的)

//this isn't written as a singleton
class MySingleton {
private SharedArray sharedArray = new sharedArray();

void someMethod(int i, int aNewValue) {
BaseClass.sharedArray[i] = aNewValue;
}

int getSharedValue(int i) {
return BaseClass.sharedArray[i];
}
}

class ObjectOne extends MyCustomViewObjectThing {
private MySingleton mySingleton

void doMyChangeActivity(int i) {
mySingleton.someMethod(i, i);
}
}

class ObjectTwo extends MyCustomViewObjectThing {
private MySingleton mySingleton

void doMyChangeActivity(int i) {
mySingleton.someMethod(i, i*2);
}
}

我知道这段代码很糟糕,但它只是为了说明我的意思:-)

关于ios - 一个对象的变化应该影响同一类的其他对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15520452/

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