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;

}

相關文章
相關標籤/搜索