zoukankan      html  css  js  c++  java
  • @synchronized(self)的用法 小结

    @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;

    }

  • 相关阅读:
    [蓝桥杯2019初赛]
    HDU2054
    HDU1175
    POJ3259
    数据结构
    欢迎来测!!!
    jsp页面el取不到值,java片断可以取到
    HTML中table边框的显示总结转载▼
    jquery插件图片延时加载实例详解(转)
    引用CDN内容的方法总结(转)
  • 原文地址:https://www.cnblogs.com/linzhengbo/p/6126755.html
Copyright © 2011-2022 走看看