设置一个Person类
Person.m代码:
staticPerson
*ps =
nil;
//+ (Person *)sharePerson
//{
// if (ps == nil) {
// //加上锁
// @synchronized(self) {
// ps = [[Person alloc] init];
// }
// }
// return ps;
//}
//单例的另一种创建方法----GCD的一种用法
+ (Person *)sharePerson
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
ps = [[Person alloc] init];
});
return ps;
//{
// if (ps == nil) {
// //加上锁
// @synchronized(self) {
// ps = [[Person alloc] init];
// }
// }
// return ps;
//}
//单例的另一种创建方法----GCD的一种用法
+ (Person *)sharePerson
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
ps = [[Person alloc] init];
});
return ps;
}
main.m代码:
Person*jack = [PersonsharePerson];
jack.name =@"jack";
Person *rose = [PersonsharePerson];
rose.name=
@"rose";
Person *tome = [PersonsharePerson];
NSLog(@"%@", jack.name);
NSLog(@"%@", rose.name);
NSLog(@"%@", tome.name);
输出结果全为rose
本文介绍使用Objective-C实现单例模式的两种方法,并通过一个简单的示例展示如何利用单例模式来确保类只有一个实例,并提供一个全局访问点。文章还对比了使用@synchronized和GCD(dispatch_once)实现线程安全的单例模式的区别。
528

被折叠的 条评论
为什么被折叠?



