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

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

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;
    }

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

membalas semua(2)
左手右手慢动作

Itu sahaja, yang pertama ialah kod standard semasa ObjC singleton.

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

Kaedah singleton ini ialah bentuk standard dalam mod ARC (pengurusan memori automatik) Apabila memanggil secara luaran, terus [类名 shareUser] dapatkan singleton Ingat untuk menulis antara muka dalam fail h dan jangan gunakan _sharedSingleton.

xxx.h

@interface xxx : xxx
{

}
+ (instancetype)shareUser;
@end

Di siniinstancetype mengembalikan jenis kelas semasa.

Bagi sekeping kod kedua, menulis static User *_sharedSingleton = nil; sebagai pembolehubah global adalah kaedah penulisan pada era BSMM, termasuk menulis semula (id)allocWithZone:(NSZone *)zone dan kaedah lain, yang juga merupakan kaedah penulisan gaya lama.

小葫芦

Kitaran hayat pembolehubah statik yang diubah suai oleh kata kunci statik adalah sama Ia dimulakan pada masa penyusunan dan memori hanya akan dikeluarkan apabila program keluar! Walau bagaimanapun, pembolehubah mempunyai skop Sebagai contoh, dalam cara pertama anda menulis, pembolehubah ini ialah pembolehubah statik tempatan dan hanya boleh digunakan dalam kaedah ini! Bagi cara penulisan kedua anda, pembolehubah ini ialah pembolehubah statik global dan boleh digunakan secara global

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan