码迷,mamicode.com
首页 > 其他好文 > 详细

@synchronized(self)的用法 小结

时间:2016-12-02 19:28:43      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:pac   bsp   sel   文件   object   变量   实现   ring   white   

@synchronized() 的作用是创建一个互斥锁,保证在同一时间内没有其它线程对self对象进行修改,起到线程的保护作用, 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。

 
例一://单例的实现
 
Student.h
 
#import <Foundation/Foundation.h>
@interface Student : NSObject<NSCopying,NSMutableCopying>
@property(nonatomic,copy)NSString *name;
//1、在h文件中声明一个类方法,用于初始化实例
+(id)shareStudent;
@end
 
Student.m
 
#import "Student.h"
//2、在.m文件中首先声明一个static修饰的对象,此对象此时是一个空指针
static Student *stu = nil;
@implementation Student
//3、实现.h中声明的类方法
+(id)shareStudent{
    //避免多线程操作带来的弊端  (互斥锁)
    @synchronized(self){
        if (stu == nil) {
            stu = [[Student alloc]init];
        }
        return stu;
    }
}
//4、避免alloc产生新对象,所以要重写allocWithZone方法
+(instancetype)allocWithZone:(struct _NSZone *)zone{
    if (stu == nil) {
        stu = [super allocWithZone:zone];
    }
    return stu;
}
//5、未了避免拷贝产生新对象,我们需要重写copyWithZone以及mutablecopyWithZone方法
-(id)copyWithZone:(NSZone *)zone{
    return stu;
}
-(id)mutableCopyWithZone:(NSZone *)zone{
    return stu;
}
@end
 
例二://操作类的实现

# import "NetworkManager.h"

 

static NetworkManager *network = nil;

 

@implementation NetworkManager

 

+ (NetworkManager *)getNetworkInstance{

@synchronized(self){

if (nil == network){

network = [[NetworkManager alloc] init];

{

}

return network;

}

@synchronized(self)的用法 小结

标签:pac   bsp   sel   文件   object   变量   实现   ring   white   

原文地址:http://www.cnblogs.com/linzhengbo/p/6126755.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!