gpt4 book ai didi

objective-c - BOOL ivar 是否应该是允许另一个类设置它的指针?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:33 24 4
gpt4 key购买 nike

我的类有一个 BOOL 属性需要由另一个类设置,所以我尝试使用指针。我正在为它声明一个属性:

@interface SomeClass : SuperClass
{
BOOL *_shared;
}
@property(nonatomic) BOOL *shared;

这是执行此操作的正确方法吗?然后我会像这样简单地设置和访问值:

*self.shared = YES;

或者将其设置为可保留属性的正确方法是什么?

最佳答案

不,您不想发送一个指向实例变量的指针,以便其他一些类可以设置该实例变量。这样做很脆弱,会破坏封装。这是一个糟糕的设计模式。

这也是完全没有必要的。

如果实例 A 可以“发送一个指针”给实例 B,那么实例 A 可以轻松地将对自身的引用发送给实例 B。从那里,实例 B 可以简单地执行 [instanceA setShared:YES];.

@interface B:UIViewController
@property(strong) A *controllerA;
@end

@interface A:UIViewController
@property BOOL dogDoorEnabled;
@end

@implementation A
...
- (void) doSomething
{
B *b = .... get an instance of B ...;
[b setControllerA: self];
}
@end

@implementation B
...
- (void) doSomethingElse
{
BOOL isCheeseOnFire = ... calculate whether the cheese is burning ...;
[[self controllerA] setDogDoorEnabled: !isCheeseOnFire];
}
@end

(注意保留循环——如果 A 以某种方式直接或间接保留 B,则 B 对 A 的 (strong) 引用将创建一个保留循环。调用 [ b setControllerA:nil] 当你想打破这个循环时。)

现在,如果出于某种原因您仍然认为需要将指向 A 的内部状态的指针发送给 B,请更新您的问题。

关于objective-c - BOOL ivar 是否应该是允许另一个类设置它的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461622/

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