objective-c – BOOL ivar应该是一个允许另一个类设置它的指针吗
发布时间:2020-12-16 10:51:21 所属栏目:百科 来源:网络整理
导读:我的类有一个BOOL属性需要由另一个类设置,所以我试图使用指针.我正在为此声明一个属性: @interface SomeClass : SuperClass{ BOOL *_shared;}@property(nonatomic) BOOL *shared; 这是正确的方法吗?然后我只需设置并访问这样的值: *self.shared = YES; 或
我的类有一个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将创建一个保留周期.当你想打破那个周期时,调用[b setControllerA:nil]. ) 现在,如果您仍然认为需要发送指向A到B内部状态的指针,请更新您的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |