在Objective C上从静态方法调用非静态方法

Gal*_*Gal 4 iphone static objective-c

如何从同一对象中的静态方法调用非静态方法?

在静态方法内部:如果我使用[ClassName nonStaticMethod] Or如果我使用[self nonStaticMethod] 我得到警告:未找到类方法'+ isTrancparentImageWithUrl:'(返回类型默认为'id')

end*_*ndy 6

一个解决方案(并且极具争议性)的解决方案是将您的类转换为单例实现,然后将所有静态方法转换为常规方法.

EG如果你有一个名为FileManager的类,那里有一个看起来像的方法

+ (NSString *) getDocumentsDirectory
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,你想从内部调用非静态方法,你需要将实现更改为类似的东西

+ (FileManager *)sharedInstance {
    // Singleton implementation
    static FileManager* instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[FileManager alloc] init];
    });
    return instance;
}

- (NSString *) getDocumentsDirectory
Run Code Online (Sandbox Code Playgroud)

而不是打电话

[FileManager getDocumentsDirectory]; 
Run Code Online (Sandbox Code Playgroud)

你会打电话

[[FileManager sharedInstance] getDocumentsDirectory];
Run Code Online (Sandbox Code Playgroud)

有几个原因可以解释为什么你不想创建一个单例,但这超出了我的响应范围:).

  • @Gal:这实际上是一个合理的模式而不是hacky. (2认同)