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

objective-c – BOOL ivar应该是一个允许另一个类设置它的指针吗?,第1张

概述我的类有一个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内部状态的指针,请更新您的问题.

总结

以上是内存溢出为你收集整理的objective-c – BOOL ivar应该是一个允许另一个类设置它的指针吗?全部内容,希望文章能够帮你解决objective-c – BOOL ivar应该是一个允许另一个类设置它的指针吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存