[非凡程序员]单例模式

#import <Foundation/Foundation.h>

#import "Person.h"

#import "Theme.h"

#import "Moblie.h"




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

    @autoreleasepool {

        // insert code here...

        NSLog(@"Hello, World!");

        //一般对象实例化的过程

        Person *newPerson=[[Person alloc]init];

        

        //利用了我们自己封装的方法实例化的对象,这时的对象叫单例对象

        Person *person=[Person sharePerson];

        //利用了我们自己封装的方法实例化的对象,这时的对象叫单例对象

        Person *personI=[Person sharePerson];

        //利用了我们自己封装的方法实例化的对象,这时的对象叫单例对象

        Person *personII=[Person sharePersonI];

//        对一个单例对象进行属性赋值

        personII.name=@"xiaoMing";

        personII.age=10;

        

        Person *personIII=[Person sharePersonI];

//        虽然换一个指针仍是之前的对象,修改属性值后两个指针找到的属性都会改变

        personIII.name=@"xiaoXiaoMing";

        

        NSLog(@"personII name:%@  personII age :%i      personIII name:%@  personIII age :%i",personII.name,personII.age,personIII.name,personIII.age);

        

//        NSLog(@"newPerson:%p  person:%p   personI:%p",newPerson,person,personI);

        NSLog(@"newPerson:%p  personII:%p  personIII:%p",newPerson,personII,personIII);

    

        Theme *theme=[[Theme alloc]init];

        NSMutableArray *muArray=[[NSMutableArray alloc]initWithCapacity:10];

        [muArray addObjectsFromArray:@[@"浅蓝",@"灰色"]];

        NSLog(@"%@",muArray[0]);

        theme.color=muArray;

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

//    通过单例传值

        phone.moblieColor=theme.color[0];

        NSLog(@"手机的主题颜色:%@",phone.moblieColor);

        

        NSArray *array=@[@"1",@"11",@"14",@"2"];

        NSComparisonResult (^sort)( id ,id ) = ^( id object1 , id object2 ){

            return [object1 compare:object2];

        };

        

//        NSArray *sortArray=[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

//            return [obj1 compare:obj2];

//        }];

        NSArray *arratS=[array sortedArrayUsingComparator:sort];

      

        NSLog(@"%@",arratS);

        

        [person setBlock:^(NSString *name) {

            person.name=name;

        }];

        person.blockTest(@"jack");

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

        

        //-------复习代码块

         __block int q=9;

        //无返回无参数的代码块;

        void (^my_block)(void);//声明

        my_block=^(void){

            q=q-6;

           

        };//定义

        my_block();//调用

        NSLog(@"%i",q);

        

        //有返回值有参数的

        int (^block)( double , double ) = ^(double num1, double num2){

            return (int)num1 + (int)num2;

        };

        NSLog(@"%i", block(2,4));

        

        //构造块:

        typedef int (^add_block) (int,int);

        add_block addMethod=^(int num , int num1){

            return num1+num;

            

        };

        int sum=addMethod(2,3);

        NSLog(@"%i",sum);

        

        //静态块,在递归调用时使用

        static int (^blockI) ( void )=^{

            return 1;

        };

        

        //-------设计模式--(单例模式)

//        特点:(1)只有一个对象(2)相当于一个全局变量 3)多个对象使用

//        实现:

//        1)创建一个类(2)在实现文件证明一个全局变量(3)封装一个实例化单例对象的方法,这是以一个类方法,判断全局变量是否为空最终保证对象性的唯一性(4)接口文件中声明封装的方法(5)引入特殊类的头文件(6)通过封装的实例化单例对象的方法实例化出对象。

//        单例对象:(1)可以有多个指针指向(2)单例对象可以传值

        

//        注意:单例对象不会轻易被释放,谨慎使用

        

        

    //代码块练习:字符串编码:利用代码块将字符串@“apple”变化为@“abpqpqlmef”

//        单例练习:建立Son类,有属性motherNamefatherName,单例传值给父亲对象和母亲你、对象

        

    }

    return 0;

}


@implementation Theme

static id themeObject;

+(id)shareTheme{

    if (themeObject==nil) {

        themeObject=[[self alloc]init];

    }

    return themeObject;

}


你可能感兴趣的:([非凡程序员]单例模式)