iOS study Day6 -2 单例模式

来源:互联网 发布:牛牛网络 编辑:程序博客网 时间:2024/06/15 18:34


#import <Foundation/Foundation.h>

#import "ClassA.h"

#import "Singleton.h"

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

{


    @autoreleasepool

    {

       ClassA *a1 =[[ClassAalloc]init];

       ClassA *a2 =[[ClassAalloc]init];

       ClassA *a3 = [a2 copy];

       NSLog(@"a1 = %@", a1);

       NSLog(@"a2 = %@", a2);

       NSLog(@"a3 = %@", a3);

        

       Singleton *obj1 = [[Singletonalloc] init];

       Singleton *obj2 = [[Singletonalloc] init];

       Singleton *obj3 = [obj2 copy];

       Singleton *obj4 = [SingletonshareInstance];

        

       NSLog(@"obj1 = %@", obj1);

       NSLog(@"obj2 = %@", obj2);

       NSLog(@"obj3 = %@", obj3);

       NSLog(@"obj4 = %@", obj4);

        

        [a1release],a1 = nil;

        [a2release],a2 = nil;

        [obj1release],obj1 = nil;

        [obj2release],obj2 = nil;

        [obj3release],obj3 = nil;

        [obj4release],obj4 = nil;

       NSLog(@"obj1 = %@", obj1);

       NSLog(@"obj2 = %@", obj2);

       NSLog(@"obj3 = %@", obj3);

       NSLog(@"obj4 = %@", obj4);

        

        

    }

   return 0;

}



//singleton.h


#import <Foundation/Foundation.h>


@interface Singleton :NSObject


+(Singleton*) shareInstance;


@end


//singleton.m



#import "Singleton.h"


@implementation Singleton


//通过类方法返回单例

+(Singleton*) shareInstance

{

   static Singleton* sing =nil;

    //多线程互斥锁

    @synchronized(self)

    {

       if (sing == nil)

        {

            sing = [NSAllocateObject([selfclass], 0, NULL) init];

        }

    }

    

   return sing;

}


//allocWithZone重写(源于NSObject的类方法)

//在正常做ALLOC时会分配地址,加于allocWithZone方法,

//重写方法,使得alloc方法仅在该变量不存在时候分配一次

+(id) allocWithZone:(NSZone *)zone

{

    return [[selfshareInstance] retain];

}



//copyWithZone重写(源于NSObject的实例方法)

//正常的copy 方法会将实例拷贝一份复制至新地址

//重写方法,使得copy方法返回自身

-(id) copyWithZone:(NSZone* )zone

{

    return self;

}


//retain重写(源于NSObject的实例方法)

-(id) retain

{

    return self;

}


//retainCount重写 (返回值永远是常量%li ,NSUIntegerMax = -1)

-(NSUInteger) retainCount

{

    returnNSUIntegerMax;

}


//release重写

-(onewayvoid) release

{

    

}


//autorelease重写 (返回自身)

-(id) autorelease

{

    return self;

}


@end




0 0
原创粉丝点击