一.單例模式的特色數組
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;
}