Objective c 使用静态变量和类方法访问对象可以吗?

Objective c 使用静态变量和类方法访问对象可以吗?,objective-c,Objective C,在objective-c中使用类方法和静态变量的组合来访问对象实例是否可以接受OO编程?(我相信这就是所谓的单身?) 例如: OverlayController.h @interface OverlayController : NSObject - (void)doSomething; //instance + (OverlayController*)controller; //class @end OverlayController.m #import "OverlayController.

在objective-c中使用类方法和静态变量的组合来访问对象实例是否可以接受OO编程?(我相信这就是所谓的单身?)

例如:

OverlayController.h
@interface OverlayController : NSObject
- (void)doSomething; //instance
+ (OverlayController*)controller; //class
@end

OverlayController.m
#import "OverlayController.h"  

static OverlayController *activeController;
@implementation OverlayController

- (void)show { //equivalent of init
    activeController = self;
}

- (void)doSomething {} //now have access to the object instance

+ (OverlayController*)controller {
    return activeController;
}

@end
现在可以使用
overlycontroller*controller=[overlycontroller-controller]从任何上下文访问该对象


我以前从未遇到过类似的情况,我发现所有其他针对单身人士的代码都使用了各种调度魔法来让事情正常运行,所以我想知道使用这些代码是否会产生任何重大问题?

您在很大程度上回答了自己的问题。您描述的代码结构有一个命名的设计模式,这意味着它是完全可以接受的OO编程


我说完全可以接受,有些人不喜欢单身,但他们很有效。

你所描述的是单身

广泛使用,当您只允许对象的单个实例时,可以使用非常好的设计模式

进一步阅读如下:


该代码目前存在几个问题。1) 你在哪里分配/初始化单身汉?2) 代码不会阻止某人创建其他实例并调用
show
方法。这将扰乱
activeController
的设置。使用代码> > DeXCHYONS/<代码>的模式是有原因的。考虑一下你想用它来做什么,因为你的当前样本是一个半突变单体。