Richard-zhang-iOS的博客


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

多线程之NSThread

发表于 2018-09-21 | 分类于 iOS

iOS开发中实现多线程的方式主要包括以下一个方面,我们会通过后续的文章一一介绍他们

pthread: 跨平台**,适用于多种操作系统,可移植性强,是一套纯C语言的通用API,且线程的生命周期需要程序员自己管理,使用难度较大,所以在实际开发中通常不使用。

NSThread: 基于OC语言的API,使得其简单易用,面向对象操作。线程的声明周期由程序员管理,在实际开发中偶尔使用,底层实现是基于pthread。

GCD: 基于C语言的API,充分利用设备的多核,旨在替换NSThread等线程技术。线程的生命周期由系统自动管理,在实际开发中经常使用。

NSOperation: 基于OC语言API,底层是GCD,增加了一些更加简单易用的功能,使用更加面向对象。线程生命周期由系统自动管理,在实际开发中经常使用。

本文详细介绍了pthread和NSThread在iOS中的使用,主要包括以下几个方面

阅读全文 »

多线程之NSOperation

发表于 2018-09-20 | 分类于 iOS

本文详细介绍了NSOperation和NSOperationQueue在iOS中的使用,主要包括以下几个方面

  • NSOperation、NSOperationQueue简介
  • NSOperation、NSOperationQueue使用步骤
  • NSOperationQueue 控制串行、并发
  • NSOperation 操作依赖
  • NSOperation 优先级
  • NSOperationQueue 线程间的通信
  • NSOperation、NSOperationQueue 常用属性和方法归纳

NSOperation、NSOperationQueue 简介

NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。实际上 NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。我们在介绍GCD的时候介绍了任务和队列的概念NSOperation其实就是我们上面所说的任务,但是这个类不能直接使用,我们要用他的两个子类,NSBlockOperation和NSInvocationOperation,而NSOperationQueue就是类似于GCD中的队列,用于管理你加入到其中的任务。

阅读全文 »

多线程之GCD

发表于 2018-09-20 | 分类于 iOS

本文详细介绍了GCD在iOS中的使用,主要包括以下几个方面

  • GCD 简介
  • GCD优点
  • GCD基础概念
  • GCD 的使用步骤
  • GCD 组合方式
  • GCD 常用方法总结

GCD 简介

Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。

GCD优点

  • GCD 可用于多核的并行运算
  • GCD 会自动利用更多的 CPU 内核(比如双核、四核)
  • GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
  • 程序员只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码
阅读全文 »

多线程之基础概念

发表于 2018-09-18 | 分类于 iOS

本文主要对比了iOS多线程编程中所涉及的一些概念

  • 进程 vs. 线程
  • 同步 vs. 异步
  • 串行 vs. 并发
  • 并行 vs. 并发
  • 任务 vs. 队列
  • 队列 vs. 线程
  • 同步 vs. 互斥
  • 异步 + 串行
  • 异步 + 并发
  • 同步 + 串行(很少使用、可能死锁)
  • 同步 + 并发(很少使用)
阅读全文 »

iOS彻底搞清属性与成员变量

发表于 2018-09-15 | 分类于 iOS

本文主要解决如下问题

  • 成员变量、实例变量、属性变量、局部变量、全局变量的概念
  • @property、@synthesize、@dynamic本质
  • 重写getter和setter方法注意事项
  • 类别(Category)中属性Property
  • 类别(Category)中添加实例变量
  • Objective-C 中的点语法
  • self.和下划线的区别
  • 属性、成员变量、self.var、_var使用经验总结

案例讲解

本节通过实例解释成员变量、实例变量、属性变量、局部变量、全局变量的概念

1
2
3
4
5
6
7
8
9
#import <UIKit/UIKit.h>
@interface MyViewController :UIViewControlle
{
UIButton *yourButton;//实例变量
int count;//成员变量
id data;//实例变量
}
@property (nonatomic, strong) UIButton *myButton;//公有属性
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#import "ViewController.h"
@interface ViewController ()
{
BOOL test;//成员变量
NSString *myString;//实例变量
}
@property(nonatomic,strong,readwrite)NSString *name;//私有属性
@end
static int hu=3;//全局变量
NSString*sttr1=@”S1ViewController”;//全局变量
@implementation ViewController
{
BOOL test1;//成员变量
}
- (void)viewDidLoad {
[super viewDidLoad];
// 局部变量
NSArray *array = [[NSArray alloc] initWithObject:@“123”,nil];
}
@end
阅读全文 »

进程和线程的区别

发表于 2018-09-09 | 分类于 计算机

本文对比操作系统中比较容易混淆的概念进程和线程,主要从如下几个方面来对比

  • 举例对比二者区别
  • 进程介绍
  • 线程介绍
  • 二者的区别和联系
  • 总结
  • 多任务操作系统简介

先给出结论:

进程是资源分配的基本单位,线程是调度的基本单位。进程包含线程,线程共用进程的资源

引用知乎上某大神的答案如下:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。

阅读全文 »

操作系统之进程状态图

发表于 2018-09-09 | 分类于 计算机

本文主要讨论操作系统中进程的状态,不同操作系统有对应的进程状态图,但是一般可归为以下几类

  • 三态模型

  • 五态模型

  • 细分五态模型

三态模型

三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。

阅读全文 »

操作系统之线程状态图

发表于 2018-09-08 | 分类于 计算机

本文主要介绍了线程的状态图,以及通过iOS中NSThead的具体例子来详细解释每个状态的意义。

  • 线程状态图综述
  • JAVA中线程状态图实例
  • iOS中NSThead线程状态图

线程状态图综述

阅读全文 »

JavaScrip中this原理及经验

发表于 2018-08-30 | 分类于 Javascript

This在一般的面向对象语言中,它代表了当前对象的一个引用,而在js中却经常让人觉得混乱,它不是固定不变的,而是随着它的执行环境的改变而改变。

this对象是运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。——《Javascript高级程序设计》

在Javascript中this总是指向调用它所在方法的对象。因为this是在函数运行时,自动生成的一个内部对象,只能在函数内部使用

this的设计目的就是在函数体内部,指代函数当前的运行环境。

本文主要从两方面解释this的原理

  • 通过案例分析Javascript的内存情况,解释this的作用机理
  • 总结this的使用场景及注意事项
阅读全文 »

Javascript事件流

发表于 2018-08-22 | 分类于 Javascript

本章节主要包括以下四个方面:

  • 什么是事件流
  • 事件冒泡
  • 事件捕获
  • W3C事件流(DOM事件流)

什么是事件流

定义:
1.事件流描述的是从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序。

2.事件就是用户或浏览器自身执行的某种动作。诸如click(点击)、load(加载)、mouseover(鼠标悬停)。

3.事件处理程序响应某个事件的函数就叫事件处理程序(或事件侦听器)。

JS事件流最早要从IE和网景公司的浏览器大战说起,IE提出的是冒泡流,而网景提出的是捕获流,后来在W3C组织的统一之下,JS支持了冒泡流和捕获流,但是目前低版本的IE浏览器还是只能支持冒泡流(IE6,IE7,IE8均只支持冒泡流),所以为了能够兼容更多的浏览器,建议大家使用冒泡流。

阅读全文 »
123
Richard-zhang-iOS

Richard-zhang-iOS

25 日志
5 分类
18 标签
GitHub E-Mail
© 2017 — 2019 Richard-zhang-iOS
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4