Ser*_*nce 3 encapsulation objective-c instance-variables declared-property
我的类有一个BOOL需要由另一个类设置的属性,所以我试图使用指针.我正在为此声明一个属性:
@interface SomeClass : SuperClass
{
BOOL *_shared;
}
@property(nonatomic) BOOL *shared;
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?然后我只需设置并访问这样的值:
*self.shared = YES;
Run Code Online (Sandbox Code Playgroud)
或者是将其设置为可保留属性的正确方法?
bbu*_*bum 11
不,您不希望发送指向实例变量的指针,以便其他一些类可以设置实例变量.这样做很脆弱,打破了封装.这是一个糟糕的设计模式.
这也完全没必要.
如果实例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
Run Code Online (Sandbox Code Playgroud)
(注意保留周期 - 如果A以某种方式直接或间接地保留B,(strong)则从B对A 的引用将创建保留周期.[b setControllerA:nil]当您想要打破该周期时调用.)
现在,如果您仍然认为需要发送指向A到B内部状态的指针,请更新您的问题.
我会用
@interface SomeClass { }
@property(nonatomic) NSNumber *shared;
...
self.shared = [NSNumber numberWithBool:YES]; // in the other class
if ([self.shared boolValue]) {...} // in SomeClass where you want to find what is set
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |