Uiideas Blog


  • 首页

  • 文章列表

iOS-多线程网络

发表于 2016-11-20   |  

进程和线程的概念

进程
    说明
        进程是指在系统中正在运行的一个应用程序
        每个进程间是独立的,每个进程均运行在其专用且受保护的内存空间内

线程
    说明
        一个进程要执行任务,必须有线程(每一个进程至少要一个线程)
        一个进程(程序)的所有人物都在线程中执行
        线程是进程中的一条执行路径

线程的串行
    说明
        一个线程里面任务的执行顺序是串行的
        如果要子1个线程中执行多个任务,那么只能一个一个的按照顺序执行这些任务

主线程
    说明
        一个iOS程序运行后,默认会开启一条线程,称为 主线程 或 UI线程
        iOS中的和UI相关的所有操作必须在主线程中执行
    作用
        显示\刷新UI界面
        处理UI事件(比如点击事件,滚动事件,拖拽事件)
    使用注意
        不要将比较耗时的操作放倒主线程中
        耗时操作会阻塞主线程,严重影响UI的流畅度,给用户一种卡的体验
        可将耗时操作放在子线程中执行

子线程
    说明
        iOS中除了主线程之外的线程都是子线程
        子线程也称为(后台线程,非主线程)

多线程
    说明
        一个进程中可以开启多条线程,每个线程可以并行执行不同的任务
    原理
        同一时间,CPU只能处理一条线程,只有1条线程在执行
        多线程的并发执行,其实是CPU快速的在多条线程之间调度(切换)
        如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
    优点
        能适当提高程序的执行效率
        能适当的提高资源的利用率(CPU,内存的利用率)
    缺点
        创建线程是有开销的,iOS下主要成本包括:
            内核数据结构(大约1KB)
            栈空间(子线程512KB,主线程1MB,可使用-setStackSize设置,最小16K)
            创建线程答曰需要90毫秒的时间
        如果开启大量的线程,会降低程序的性能
        线程越多,CPU在调度线程上的开销就越大
        程序设计更佳复杂,比如线程之间的通信,多线程的数据共享
    资源共享
        一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
        多个线程访问同一个对象,同一个变量,同一个文件
    安全隐患
        当多个线程访问同一块资源时,很容易引发数据错乱和安全问题
        可用 @synchronized 加入互斥锁来解决此问题

进程和线程的比较
    线程是CPU调用(执行任务)的最小单位。
    进程是CPU分配资源和调度的单位
    一个程序可以对应多个线程,一个进程中可以有多个线程,但至少有一个线程
    同一个进程内的线程共享进程的资源
阅读全文 »

frp-内网穿透

发表于 2016-11-03   |  

声明

最近电信分配的IP变成了内网IP,导致之前在家里树莓派上开放的服务在外网无法连接。偶然看到frp项目,配置和使用非常简单,只需要一个外网的vps作为代理即可。虽然这样绕了一大圈速度比之前慢了很多,总算可以使用。

官方资料

[文档](https://github.com/fatedier/frp/blob/master/README_zh.md)
[下载地址](https://github.com/fatedier/frp/releases)

外网安装

下载
    wget .../frp_0.8.1_linux_amd64.tar.gz

解压
    tar -zxvf frp_0.8.1_linux_amd64.tar.gz

移动到/usr/local/
    mv frp_0.8.1_linux_amd64/ /usr/local/opt/frp 

编辑 frps.ini
    [common]
    bind_port = 7000
    dashboard_port = 7500
    log_file = /var/log/frps.log
    log_level = info
    log_max_days = 3
    [ssh]
    listen_port = 6000
    auth_token = 123
阅读全文 »

iOS-UI框架-笔记

发表于 2016-09-21   |  

基础概念

相关框架
    UIKit             创建管和管理应用程序的用户界面
    QUartzCore        提供动画特效以及通过硬件进行渲染的能力
    CoreGraphics      提供2D绘制的基于C的API
    CoreLocation      使用GPS和WIFI获取位置信息
    MapKit            为应用程序提供内嵌地图的接口
    AVFoundation      音频处理

Xcode中创建项目时字段说明
    Product Name              产品名称
    Organization Name         公司名称
    Organization Identifier   公司唯一标示,通常为域名的反写,如 com.uiideas
    Bundle Identifier         产品唯一标识符,自动生成(公司唯一标识符+产品名称)
    Language                  使用的语言,包含OC和Swift
    Devices                   设备,Universal指通用
    Use Core Data             封装了SQLite数据库
    Include Unit Tests        包含单元测试工具
    Include UI Tests          包含UI测试工具

模拟器操作
    回到首页
        Command + Shift + H
    切换物理和模拟键盘
        Command + Shift + K
    缩放模拟器
        Command + 1,2,3,4,5
    说放手势
        按住option键可开启多指缩放,同时按住shift键可移动手指位置
阅读全文 »

Raspberry Pi 安装 Kcptun

发表于 2016-09-16   |  

声明

Kcptun的作用主要是配合SS用来做加速,试过把Kcptun安装到路由器中,由于性能和稳定性的问题效果不如安装到树莓派上面效果好,配合systemd可以做到开机启动和进程断掉重启服务。配置比较简单,下文的配置方式用来给大家参考。

相关资料

官网
    https://github.com/xtaci/kcptun

下载地址
    https://github.com/xtaci/kcptun/releases/latest

其他资源
    https://blog.kuoruan.com/102.html
阅读全文 »

Swift-笔记

发表于 2016-09-04   |  

声明

本文为学习SwiftGG 翻译的 Swift Programming Language时的笔记,看的过程中swift 3.0发布,其中的一些代码已经针对swift 3.0做了修改。
目前最新的翻译已经包括了3.0的内容,建议大家完整阅读原版。

基础部分(TheBasics)

常量和变量
    声明常量
        let maxNumber = 10
    声明变量
        var str = "Hello World"

类型标注(type annotation)
    说明
        如果在声明常量或者变量时赋了一个初始值,Swift可以推断出这个常量或者变量的类型
        在没有初始值的时候,可用来说明常量或变量存储的值的类型
    范例
        var message: String
        var red, green, blue: Double

常量和变量的命名
    说明
        可以用任何你喜欢的字符作为常量和变量名,包括 Unicode 字符
        不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符
        不能以数字开头,但是可以在常量与变量名的其他地方包含数字
        不能改变存储值的类型,也不能重复声明
    范例
        let π = 3.14159
        let 你好 = "你好世界" let ?? = "dogcow"

输出常量和变量
    说明
        print函数会自动添加换行符
        如果不想换行,可以传递一个空字符串给 terminator
        Swift可通过字符串插值的方式把常量或变量插入到字符串,格式为 “\(varName)“
    格式
        print(_:separator:terminator:)
    范例
        输出变量
            var friendlyWelcome = "Hello!"
            print(friendlyWelcome)
        不换行输出
            print("hello world!", terminator:"")
        字符串中加入变量
            var friend = "HanMeiMei"
            print("hello \(friend)")
阅读全文 »

Objective-C-笔记

发表于 2016-08-11   |  

概念

Cocoa框架
    说明
        是苹果公司为Mac OS X所创建的原生面向对象的编程环境
        是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)
        Cocoa中包含Foundation 和 UIKit

Foundation/Foundation.h
    说明
        包含了其他大量头文件,等于引入OC库
    位置
        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

NS
    说明
        是 NeXT Software 的建成
        OC不支持命名空间,NS是为了避免命名冲突而给的前缀
        看到NS前缀就知道是Cocoa中的系统类的名称

@
    说明
        OC中@由特殊用法
        @""  表示将C字符串转换为NSString
        @标识符  OC中大部分关键字是以@开头的,比如@interface,@class,@end等
阅读全文 »

MySQL-笔记

发表于 2016-08-03   |  

了解SQL

术语 
    RDBMS       Relational Database Management System - 关系数据库管理系统
    DBMS        Database Management System - 数据库管理系统
    database    数据库 - 保存有组织的数据的容器(通常是一个文件或一组文件)
    table       表 - 某种特定类型数据的结构化清单
    schema      模式 - 关于数据库和表的布局及特性的信息
    column      列 - 表中的一个字段。所有表都是由一个或多个列组成的。
    datatype    数据类型 - 每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据
    row         行 - 表中的一个记录
    primarykey  主键 - 一列(或一组列),其值能够唯一区分表中每个行
    foreignkey  外键 - 为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
    SQL         Structured Query Language - 一种专门用来与数据库通信的语言

SQL优点
    不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL。
    简单易学。它的语句全都是由描述性很强的英语单词组成,而且这些单词的数目不多。
    灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
阅读全文 »

MongoDB-笔记

发表于 2016-07-12   |  

声明

本文为阅读极客学院 - Mongodb 教程时的笔记,内容主要为知识点的梳理和备忘,建议大家查看原版。

概述

collection   集合就是一组 MongoDB 文档。相当于关系型数据库(RDBMS)中的表这种概念
document     文档就是一组键-值对。文档有着动态的模式
_id          12位十六进制数,它保证了每一个文档的唯一性。插入文档时如不提供会自动生成。
             组成:当前的时间戳(4位),机器id号(3位),服务器进程id(4位),递增值(2位)

优势

MongoDB 相比 RDBMS 的优势
    模式较少
    采用单个对象的模式,清晰简洁
    没有复杂的连接功能
    深度查询功能MongoDB,支持对文档执行动态查询
    具有调优功能
    易于扩展
    不需要从应用对象到数据库对象的转换/映射
    使用内部存储存储(窗口化)工作集,能够更快地访问数据
阅读全文 »

C语言-笔记

发表于 2016-06-11   |  

C语言执行流程

源程序.C --> 编译 --> 目标程序.o --> 链接 --> 可执行文件.out
编译:把源代码翻译成0,1,声称一个.o目标文件
链接:把目标文件和库函数整合成一个.out可执行文件

.h (header)文件作用
    方法的声明,但是不能实现方法
    声明变量
    声明结构体

C语言数据类型

基本类型
    整型
        短整形short
        整形int
        长整型long
    字符型char
    实型
        单精度型float
        双精度型double
构造类型
    数组
    结构体struct
    公用型union
    枚举类型enum
指针类型
空类型void
定义类型typedef
阅读全文 »

Git-笔记

发表于 2016-05-26   |  

来源

https://git-scm.com/book/zh/v2/

配置文件

/etc/gitconfig
    包含系统上每一个用户及他们仓库的通用配置。
    如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
~/.gitconfig 或 ~/.config/git/config
    只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
.git/config
    当前使用仓库的 Git 目录中的 config 文件:针对该仓库。

配置

设置用户和邮箱
    git config --global user.name "CaoZheng"
    git config --global user.email "[email protected]"
设置默认编辑器
    git config --global core.editor emacs
列出所有配置
    git config --list
查看某项配置
    git config <key>
阅读全文 »
12
Cao Zheng

Cao Zheng

13 日志
© 2016 Cao Zheng
由 Hexo 强力驱动
主题 - NexT.Pisces