在iOS App中访问静态库中的属性

时间:2013-05-23 10:52:58

标签: iphone objective-c

我有一个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)

1 个答案:

答案 0 :(得分: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]以获取您的版本。

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