0

我有一个 Objective-C 静态库(iOS SDK 6):

实施文件 ( .m )

#import "MyClass.h"

@implementation MyClass
static id _instance;
static NSString *version;

- (id)init {
    if(_instance == nil) {
        _instance = [super init];
        version = @"1.0";
    }
    return _instance;
}

- (NSString *)getVersion {
    return version;
}

+ (MyClass *)sharedInstance {
    return _instance;
}

@end

当我访问其他 iPhone App 项目中的类(导入库)时,我无法获取版本字符串。

#import "ViewController.h"
#import <MyClass/MyClass.h>

@interface ViewController ()
@end
@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyClass *cls = [MyClass sharedInstance];
    NSLog(@"Loaded. Version: %@", [cls getVersion]);
}
@end

我错过了什么?没有报错,但是版本是(null)

4

1 回答 1

3

有很多错误...

  • init根本没有被调用
  • 等等

...您似乎尝试使用单例模式。所以,这样做...

+ (MyClass *)sharedInstance {
  static MyClass *instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[[self class] alloc] init];
  });
  return instance;
}

...并将您的更改init为...

- (id)init {
  self = [super init];
  if ( !self ) {
    return nil;
  }

  _version = @"1.0";
  return self;
}

...并致电[[MyClass sharedInstance] getVersion]获取您的版本。

PS 阅读 ObjC 指南,不要使用get前缀。应该只是version

于 2013-05-23T11:05:11.717 回答