您的位置:首页 > 其它

简单的单例演示

2015-12-01 20:56 357 查看
单例在设计模式书籍中是必须掌握的,OC语言的实现和C++几乎一样。

首先创建对象:

//
//  ObjectA.h

#import <Foundation/Foundation.h>

@interface ObjectA : NSObject
{
NSString * _name;
}

@property (strong) NSString * name;

/* 实现单例的函数 */
+ (ObjectA *) sharedObjectA;

@end


//
//  ObjectA.m

#import "ObjectA.h"

static ObjectA * manager = nil;

@implementation ObjectA

/* 使用name替代_name */
@synthesize name = _name;

/* 单例的标准写法 */
+ (ObjectA *) sharedObjectA
{
if (manager == nil)
{
manager = [[[self class] alloc] init];
}
return manager;
}

/* 重写Init方法 */
- (id) init
{
self = [super init];
if (self)
{
//_name = @"default name.";
self.name = @"default name.";
}
return self;
}

@end


main.m文件:

//
//  main.m

/* 演示单例,可用于全局数据共享 */

#import <Foundation/Foundation.h>
#import "ObjectA.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {
ObjectA *obj1 = [ObjectA sharedObjectA];
ObjectA *obj2 = [ObjectA sharedObjectA];
NSLog(@"obj1:%@", obj1);
NSLog(@"obj2:%@", obj2);
NSLog(@"name1:%@", obj1.name);
NSLog(@"name2:%@", obj2.name);

obj1.name = @"hello";
NSLog(@"name1:%@", obj1.name);
NSLog(@"name2:%@", obj2.name);
}
return 0;
}


输出:

2015-12-01 21:01:48.035 TestSingleCase[571:19680] obj1:<ObjectA: 0x100106e60>
2015-12-01 21:01:48.036 TestSingleCase[571:19680] obj2:<ObjectA: 0x100106e60>
2015-12-01 21:01:48.036 TestSingleCase[571:19680] name1:default name.
2015-12-01 21:01:48.037 TestSingleCase[571:19680] name2:default name.
2015-12-01 21:01:48.037 TestSingleCase[571:19680] name1:hello
2015-12-01 21:01:48.037 TestSingleCase[571:19680] name2:hello
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: