objective-c - oc单例的一些问题
给我你的怀抱
给我你的怀抱 2017-04-28 09:05:51
0
2
674

第一种不能在全局使用...没有值。第二种可以..搞不清楚原理阿

1.+ (User *)shareUser {

static User *_sharedSingleton = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
    _sharedSingleton = [[self alloc] init];
});
return _sharedSingleton;

}

2.static User *_sharedSingleton = nil;

@implementation User

  • (User *)shareUser {
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{

       _sharedSingleton = [[self alloc] init];

    });
    return _sharedSingleton;
    }

  • (id)allocWithZone:(NSZone *)zone
    {
    if (_sharedSingleton == nil) {

       _sharedSingleton = [super allocWithZone:zone];

    }
    return _sharedSingleton;
    }

  • (id)copyWithZone:(NSZone *)zone
    {
    return _sharedSingleton;
    }

给我你的怀抱
给我你的怀抱

reply all(2)
左手右手慢动作

That’s it, the first one is the current standard code of ObjC singleton.

+ (User *)shareUser {
static User *_sharedSingleton = nil; //静态全局变量
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
    _sharedSingleton = [[self alloc] init]; //dispatch once 保证大括号里的代码只执行一次
});
return _sharedSingleton;
}

This method of singleton is the standard form in ARC (automatic memory management) mode. When called externally, it is directly [类名 shareUser]获取单例,记得h文件中要写接口,不要使用_sharedSingleton.

xxx.h

@interface xxx : xxx
{

}
+ (instancetype)shareUser;
@end

Hereinstancetypereturns the type of the current class.

As for the static User *_sharedSingleton = nil;写成全局变量,是MRC时代的写法,包括重写(id)allocWithZone:(NSZone *)zone and other methods in the second piece of code, they are also written in the old style.

小葫芦

The life cycle of static variables modified by the static keyword is the same. They are initialized at compile time and the memory will only be released when the program exits! However, variables have scope. For example, in your first way of writing, this variable is a local static variable and can only be used in this method! As for your second way of writing, this variable is a global static variable and can be used globally

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template