OC 单例模式

一.单例模式的特色数组

1.至关于一个全局变量函数

2.只有一个对象atom

3.多个对象能够同时使用一个类属性spa


二.单例模式的优势3d

1.可更改实例化过程orm

2.确保了全部对象都访问惟一实例对象对象


三.单例模式的缺点it

实例化出来的是单例对象 没法被释放io


四.单例的写法table

//定义了一个静态的全局变量,当第一次调用类方法时,全局变量为空,此时进入判断进行初始化获得第一个对象 接着再次调用时全局变量已经不为空 所以不会进入判断进行实例化 此时直接返回第一次实例化的对象 因此无论调用几回类方法 只有第一次进入判断进行对象的实例化 之后返回的都是同一个对象 这就是单例

static id color;

+(id)shareColor

{

    if (color == nil) {

        color = [[self alloc]init];

    }

    return color;

}

    //建立一个单例对象

    colorSubject *subject = [colorSubject shareColor];

    

    //建立一个可变数组

    NSMutableArray *array = [[NSMutableArray alloc]init];

    

    //给可变数组添加元素

    [array addObjectsFromArray:@[@"红色",@"绿色",@"蓝色",@"黄色"]];

    //给类的数组属性设置array值

    subject.colorArray = array;

    

    Phone *phone = [[Phone alloc]init];

    //单例传值

    phone.phoneColor = subject.colorArray[2];

    NSLog(@"手机颜色:%@",phone.phoneColor);

    复习代码块获得的知识点

1.代码块也能够做为类的属性进行设置

  在类的.h文件中先声明并写set方法

#import <Foundation/Foundation.h>

typedef void (^Block)(NSString *);

@interface Person : NSObject

@property(nonatomic,strong)Block blockTest;

-(void)setBlock:(Block)block;

2.在.m文件中实现

-(void)setBlock:(Block)block{

    self.blockTest=block;

}

3.在主函数中设置

[person setBlock:^(NSString *name) {

            personI.name=name;

        }];

        person.blockTest(@"jack");

        NSLog(@"person name:%@",personI.name);


具体实例

有手机和主题两个类  手机有主题色属性 经过主题类给手机设置主题色

Phone.h:

#import <Foundation/Foundation.h>


@interface Phone : NSObject

@property(nonatomic,strong) NSString *phoneColor;


@end


Phone.m

#import "Phone.h"


@implementation Phone


@end


ColorSubject.h

#import <Foundation/Foundation.h>


@interface colorSubject : NSObject

@property(nonatomic,strong) NSMutableArray *colorArray;


+(id) shareColor;

@end


ColorSubject.m

#import "colorSubject.h"


@implementation colorSubject

static id color;

//定义了一个静态的全局变量,当第一次调用类方法时,全局变量为空,此时进入判断进行初始化获得第一个对象 接着再次调用时全局变量已经不为空 所以不会进入判断进行实例化 此时直接返回第一次实例化的对象 因此无论调用几回类方法 只有第一次进入判断进行对象的实例化 之后返回的都是同一个对象 这就是单例

+(id)shareColor

{

    if (color == nil) {

        color = [[self alloc]init];

    }

    return color;

}


@end


main.m

#import <Foundation/Foundation.h>

#import "colorSubject.h"

#import "Phone.h"


int main(int argc, const char * argv[]) {

    

    

    //建立一个单例对象

    colorSubject *subject = [colorSubject shareColor];

    

    //建立一个可变数组

    NSMutableArray *array = [[NSMutableArray alloc]init];

    

    //给可变数组添加元素

    [array addObjectsFromArray:@[@"红色",@"绿色",@"蓝色",@"黄色"]];

    //给类的数组属性设置array

    subject.colorArray = array;

    NSLog(@"%@",subject.colorArray);

    

    Phone *phone = [[Phone alloc]init];

    //单例传值

    phone.phoneColor = subject.colorArray[2];

    NSLog(@"手机颜色:%@",phone.phoneColor);


    return 0;

}

相关文章
相关标签/搜索