1、GCD 简介

全名:Grand Central Dispatch,它是苹果为多核的并行运算提出的解决方案,会合理利用CPU、自动管理线程的生命周期。使用时只需要在Block中写入需要执行的代码即可。使用非常灵活。

1.1 GCD 死锁问题

-(void)gcd{
NSLog(@"test1");
dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"test2");
});
NSLog(@"test3");
} 

输出:

2019-02-23 16:12:36.353985+0800 GCDDemo[24815:1940432] 1

这样操作 GCD 会卡在 dispatch_sync(dispatch_get_main_queue(), ^{, 或者报异常
由于是主队列同步执行而且 block 是后下入主队列的,所以 block 会放到主队列的后面等待主队列执行完毕后再执行,所以 2 是放在 3 的后面的。但是主线程也在等 block 执行完毕,这样主线程才会继续执行。也就是说 3 又在等 2 执行完毕才会执行。所以出现了死锁。

未完待续

前言:

在写项目的时候,发现一个 BUG:有一个 @propery 声明的可变数组,无论怎么增加子数组,都不会发生变化,且始终为 nil .

分析:

如果可变数组 NSMutableArray 没有在内存中创建的话,通过 @propery 创建私有属性,这个时候你要是想调用 addObjectFromArray 添加子数组,这种操作是没用的...因为它原来是 nil ,所以不论你怎么操作都始终为 nil .

[self.newsArray addObjectFromArray:a]; // newsArray 为 @propery 声明的属性(私有); a 为子数组

解决方案:

解决办法是用 LazyLoad 懒加载这个可变数组,在程序需要用到的时候就会在内存中开辟空间。

# pragma mark - lazyload
- (NSMutableArray *)newsArrary{
    if (!_newsArrary) {
        _newsArrary = [NSMutableArray array];
    }
    return _newsArrary;
}

前言:

今天利用 Bootstrap 框架写页面,页面中也运用了 AJAX 技术,碰到个 Button 一直刷新网页,导致 AJAX 失效的问题。

解决方案:

添加 type="button" 即可解决

<button class="btn btn-lg btn-primary btn-block" name="submit" onclick="query()" href="#" type="button">开始查询</button>

前言:

TOR 的全称是 "The Onion Router" , "An anonymous Internet communicaton system" 通过 TOR 访问一个地址时,所经过的节点在 TOR 节点群中随机挑选,动态变化,由于兼顾速度与安全性,节点数目通常为 2-5 个,由于追踪困难,因此有效保证了安全性。

搭建要求:

  • 一台 ECS
  • 操作系统 CentOS (不同系统步骤大致相同

TOR 域名获取:

通过 yum 安装 TOR

$ yum install -y tor

编辑 /etc/tor/torrc 文件,增加以下配置:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8080

启动 TOR 服务

sudo service tor start

当 TOR 启动后,会创建一个私钥在你的 hidden_service 目录,同时创建你的独一无二的 .onion 主机名。


配置 Tor 目录:

在 Nginx 下的 vhost 目录添加虚拟主机配置文件,例如 yourDomain.onion.conf

server
{
listen 8080;
server_name yourDomain.onion;
index index.php index.html index.htm default.php default.htm default.html;
root /你的目录/yourDomain.onion;
}

在服务器文件目录下增加内容

  <!DOCTYPE html>
  <html lang="en" dir="ltr">
    <head>
      <meta charset="utf-8">
      <title>HelloWorld!</title>
    </head>
    <body>
      <h1>HelloWorld</h1>
    </body>
  </html>

紧接着重启 Nginx

$ service nginx restart

结尾:

至此,你已经可以通过这个 TOR 域名访问到你的服务器上的内容。