首页 > 代码库 > ios学习记录 day44 UI20 Storyboard 高级可视化编程 + 单例

ios学习记录 day44 UI20 Storyboard 高级可视化编程 + 单例

可视化编程 : 5.0之前 xib  5.0之后 Storyboard

注意事项:1.在AppDelegate中不用代码初始化一个window   2.在general  设置 Main Interface(创建的时候自动设置的)

 

weak可以指向 但是没有拥有权   strong有拥有权

 

单例特性:

1.唯一性  创建的对象永远指向同一块内存地址     2.不释放   从打开程序到后台关闭 对象都不释放

单例安全:加锁@synchronized  防止同一块内存被创建两次,破坏唯一性

    //单例安全
    @synchronized(self){
        //如果不存在的话 就创建一个
        if (!single) {
            single = [[Singleton alloc]init];
        }
        return single;
    }

 

转载内容!

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

1.单例模式的要点:

  显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

2.单例模式的优点:

  1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
  2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
 
iOS中的单例模式
  在objective-c中要实现一个单例类,至少需要做以下四个步骤:
  1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
  2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
  3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
  4、适当实现allocWitheZone,copyWithZone,release和autorelease。
下面以SurveyRunTimeData为例子:
 
static SurveyRunTimeData *sharedObj = nil; //第一步:静态实例,并初始化。
@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance  //第二步:实例构造检查静态实例是否为nil
{
    @synchronized (self)
    {
        if (sharedObj == nil)
        {
            [[self alloc] init];
        }
    }
    return sharedObj;
}

+ (id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
{
    @synchronized (self) {
        if (sharedObj == nil) {
            sharedObj = [super allocWithZone:zone];
            return sharedObj;
        }
    }
    return nil;
}

- (id) copyWithZone:(NSZone *)zone //第四步
{
    return self;
}

- (id) retain
{
    return self;
}

- (unsigned) retainCount
{
    return UINT_MAX;
}

- (oneway void) release
{
    
}

- (id) autorelease
{
    return self;
}

- (id)init
{
    @synchronized(self) {
        [super init];//往往放一些要初始化的变量.
        return self;
    }
}

@end

 

//单例对象
    [UIApplication sharedApplication];
    [NSNotificationCenter defaultCenter];//消息中心
    [NSUserDefaults standardUserDefaults];//plist文件
    [NSFileManager defaultManager];//文件管理
    [NSBundle mainBundle];//bundle路径