职分都增进到该代码块里面,在用户实例化的诀

2019-08-16 作者:小鱼儿玄机30码   |   浏览(52)

国外媒体曾报道,Windows服务器在营收比例方面,依然是市场上遥遥的领先者。鉴于此,我们为广大读者收集整理了一些在Windows服务器管理方面的经验技巧,希望在实践工作中能给您带来一丝灵感。

最近一个客户的服务器出现死机现象,上去看了下日志,里面有很多的DCOM错误日志,也不知道是不是死机的原因,先处理了再说

ARC和MRC 兼容的单例模式,arcmrc兼容

一、ARC下的单例实现

  说明:在用户实例化的方法控制单次执行,同时开放单例的初始化方法。

-(instancetype)init{

    self=[super init];
    if(self){
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
        });
    }
    return self;


}

static id instance; 
 (instancetype)allocWithZone:(struct _NSZone *)zone{ 
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{ 
    instance=[super allocWithZone:zone]; 
    }); 
return instance;
} 


  (instancetype) shareAudio{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{ 
    instance=[[self alloc]init]; 
    }); 
    return instance; 
} 

 (id)copyWithZone:(struct _NSZone *)zone{ 
    return instance;
}
二、MRC下的单例实现

   说明:在用户实例化的方法控制单次执行,同时开放单例的初始化方法,由于当前为MRC所以需要控制参内存管理的方法单次执行,因此相比ARC需要增加:

static id instance; 
 (instancetype)allocWithZone:(struct _NSZone *)zone{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
        instance=[super allocWithZone:zone]; 
    }); 
    return instance; 
} 


  (instancetype) shareAudio{
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
        instance=[[self alloc]init]; 
    }); 
    return instance; 
} 
-(oneway void)release{ 
} 

-(instancetype)autorelease{ 
    return instance; 
} 

-(instancetype)retain{ 
    return instance; 
} 

-(NSUInteger)retainCount{ 
    return 1; 
}
三、兼容MRC 和ARC的宏定义

   说明:为了方便后期的引用,可以将单例抽取为宏定义,鉴于抽取的时候考虑到当前的手动计数和自动计数因此引入条件编译:

#if !__has_feature(objc_arc)
======当前是ARC
#else
======当前是MRC
#endif

代码:
#define singleton_h(name)    (instancetype) share##name;


#if !__has_feature(objc_arc)
#define singleton_m(name)
 static id instance;
 (instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance=[super allocWithZone:zone];
    });
    return instance;
}


  (instancetype) share##name{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance=[[self alloc]init];
    });
    return instance;
}
-(oneway void)release{
}

-(instancetype)autorelease{
    return instance;
}

-(instancetype)retain{
    return instance;
}

 (id)copyWithZone:(struct _NSZone *)zone{
    return instance;
}
-(NSUInteger)retainCount{
    return 1;
}

#else

#define singleton_m(name)
static id instance;
 (instancetype)allocWithZone:(struct _NSZone *)zone{
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
  instance=[super allocWithZone:zone];
});
  return instance;
}


  (instancetype) share##name{
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
   instance=[[self alloc]init];
  });
  return instance;
}

 (id)copyWithZone:(struct _NSZone *)zone{
   return instance;
}
#endif
四、文件引用

1 在.h文件引用singleton_h(audio);

2 在.m文件引用singleton_m(audio);

 

兼容的单例模式,arcmrc兼容 一、ARC下的单例实现 说明:在用户实例化的方法控制单次执行,同时开放单例的初始化方法。 - (insta...

ios多线程操作— GCD调度组

有这么一个需要,分别执行2个耗时的异步操作,等2个异步操作都执行完毕后在回到主线程执行操作。如果想要快速高效地实现这个需求,可以考虑使用调度组。 调度组的创建代码如下:

dispatch_group_t group = dispatch_group_create();

往调度组里面添加任务的函数如下:

dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, ^(void)block)

第一个参数group是一个调度组,queue是一个异步队列,这里如果使用同步队列意义就不大了,不过还是能达到效果,第三个参数是一个执行代码块,任务都添加到该代码块里面。 往调度组里面添加任务并获得通知的代码如下:

//  群组-统一监控一组任务
    dispatch_group_t group = dispatch_group_create();

    dispatch_queue_t q = dispatch_get_global_queue(0, 0);
    // 添加任务
    // group 负责监控任务,queue 负责调度任务
    dispatch_group_async(group, q, ^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"任务1 %@", [NSThread currentThread]);
    });
    dispatch_group_async(group, q, ^{
        NSLog(@"任务2 %@", [NSThread currentThread]);
    });
    dispatch_group_async(group, q, ^{
        NSLog(@"任务3 %@", [NSThread currentThread]);
    });

    // 监听所有任务完成 - 等到 group 中的所有任务执行完毕后,"由队列调度 block 中的任务异步执行!"
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        // 修改为主队列,后台批量下载,结束后,主线程统一更新UI
        NSLog(@"OK %@", [NSThread currentThread]);
    });

    NSLog(@"come here");

代码的执行结果如下: 图片 1
其中任务的下载顺序以及"come here”出现的地方不确定,但主线程的更新操作总会在最后才执行!
GCD调度组中还有一个添加任务的函数: dispatch_group_enter(dispatch_group_t group) dispatch_group_leave(dispatch_group_t group) 这两个函数要配对出现 例如:

     // 群组-统一监控一组任务
    dispatch_group_t group = dispatch_group_create();

    dispatch_queue_t q = dispatch_get_global_queue(0, 0);

    // 1> 入组 -> 之后的 block 会被 group 监听
    // dispatch_group_enter 一定和 dispatch_group_leave 要配对出现
    dispatch_group_enter(group);
    dispatch_async(q, ^{
        NSLog(@"task1 %@", [NSThread currentThread]);

        // block 的末尾,所有任务执行完毕后,添加一个出组
        dispatch_group_leave(group);
    });

    //  再次入组
    dispatch_group_enter(group);
    dispatch_async(q, ^{
        [NSThread sleepForTimeInterval:1.0];

        NSLog(@"task2 %@", [NSThread currentThread]);

        // block 的末尾,所有任务执行完毕后,添加一个出组
        dispatch_group_leave(group);
    });

    // 群组结束
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"OVER");
    });  
    NSLog(@"come here");

代码执行的效果与刚才那种方式相同! GCD中还有一个函数

dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout)

该函数是个阻塞式的等待,当我们将第二个参数设置为DISPATCH_TIME_FOREVER时,群组任务不执行完,后续代码就会无法执行,也就是说只要任务不执行完come here就不会打印。

GCD调度组 有这么一个需要,分别执行2个耗时的异步操作,等2个异步操作都执行完毕后在回到主线程执行操作。如果想要快...

    拒绝服务器重新启动

日志内容:

一般情况下,在Windows 2003 Server系统中安装完补丁程序后,系统总会提示要重新启动一下服务器。可是许多朋友往往无法容忍Windows 2003 Server服务器“慢吞吞”的启动操作,于是希望打完安全补丁之后服务器不再重新启动。其实,Windows 2003 Server服务器是否会重新启动,跟当前的系统补丁特性有一定的关系。对于那些强制需要系统启动的安全补丁,一般是无法让服务器拒绝的;但对于那些没有强制要求系统启动特性的补丁来说,可以采取如下办法:

事件类型: 错误事件来源: DCOM事件种类: 无事件 ID: 10016日期: 4/8/2009事件: 11:09:44 AM用户: NT AUTHORITYNETWORK SERVICE计算机: DMS_DEALER_WEB描述:machine-default 权限设置未将 COM 服务器应用程序(CLSID 为 {000C101C-0000-0000-C000-000000000046})的 Local Activation 权限授予用户 NT AUTHORITYNETWORK SERVICE SID (S-1-5-20)。可以使用组件服务管理工具修改此安全权限。

1.在Windows 2003 Server服务器系统桌面中,依次单击“开始”/“运行”命令,在随后打开的系统运行对话框中,输入字符串命令“cmd”,单击“确定”按钮之后,将系统工作模式切换到MS-DOS状态下;

日志内容的意思是说,

本文由小鱼儿玄机30码发布于小鱼儿玄机30码,转载请注明出处:职分都增进到该代码块里面,在用户实例化的诀

关键词: 小鱼儿玄机30码