- 博客(37)
- 资源 (12)
- 收藏
- 关注
翻译 NSOperationQueue(三)
上一篇文章中看到使用自定义NSOperation来实现多线程,写法有些复杂,但其实,使用NSOperationQueue来实现多线程非常简单。在本节中,您将学习几种执行操作的方法以及如何在运行时操纵你的operation的执行。 NSOperationQueue为我们提供了非常简便的使用多线程的方法,如果需要使用NSOperation,则更多建议使用NSOperationQueue而不是自定义NS
2017-02-28 14:13:39 310
原创 自定义NSOperation(二)
一、自定义非并发的NSOperation 定义非并发操作比定义并发操作简单得多。 对于非并发操作,您需要做的是执行您的主要任务并适当地响应取消事件; 现有的类基础结构将为您完成其他所有的工作。 对于并发操作,必须使用自定义代码替换某些现有基础架构。 以下部分显示如何实现这两种类型的对象。 1、自定义非并发操作 (1)必须实现main方法
2017-02-28 12:48:54 648
翻译 NSOperation官方文档及使用(一)
一、几个概念thread线程:用于指代码的单独执行路径。 OS X中线程的底层实现基于POSIX线程API。 process进程:用于指运行的可执行文件,其可以包含多个线程。 task任务:用于指代需要执行的工作的抽象概念。 操作:Cocoa中操作是一种面向对象的方式,用于封装我们要异步执行的工作。 操作被设计为与操作队列结合使用或者由它们自己使用。二、介绍操作如何定义和使用的1、关于Oper
2017-02-28 11:24:59 450
转载 归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中 void MemeryArra
2017-02-27 08:43:05 180
转载 runtime完成的功能举例
动态变量控制 在程序中,xiaoming的age是10,后来被runtime变成了20,来看看runtime是怎么做到的。1.动态获取XiaoMing类中的所有属性[当然包括私有] `Ivar *ivar = class_copyIvarList([self.xiaoming class], &count);` 2.遍历属性找到对应name字段 `const char *
2017-02-26 12:52:34 295
原创 runtime基础、消息转发
runtime术语 1、Class、id#if !OBJC_TYPES_DEFINED/// An opaque type that represents an Objective-C class.typedef struct objc_class *Class;/// Represents an instance of a class.struct objc_object { Cl
2017-02-26 10:43:33 282
原创 iOS 字典转模型
关于这个知识点,并没有太多难点,其中主要要记住的就是字典转模型,字典转模型一般步骤如下: (1)首先创建一个模型类,创建需要数据的 get 和 set 方法,由编译器合成 例如:@property (nonatomic, copy) NSString *answer; @property (nonatomic, copy) NSString *title;@property (nonatom
2017-02-25 15:54:06 430
原创 二分查找
(1)要求:必须采取顺序存储结构,元素必须按关键子大小有序 (2)思想:首先将表中间位置的关键字与查找的关键字比较,如果两者相等则查找成功,否则将记录按中间的元素分成前后两个表,如果要查找的关键字大于中间的关键字,则在后面的表中查找,如果要查找的关键字小于中间的关键字,则在前面的表中查找。 (3)代码 int BinSearch(int Array[],int SizeOfArr
2017-02-25 08:30:47 209
原创 NSURLSession-介绍、上传、下载(2)
NSURLConnection在iOS9被宣布弃用,NSURLSession从13年发展到现在,终于迎来了它独步江湖的时代.NSURLSession是苹果在iOS7后为HTTP数据传输提供的一系列接口,比NSURLConnection强大,坑少。 一、NSURLSession的简介 1.NSURLSession的创建 (1)使用shareSession返回session的单例,创建
2017-02-24 14:08:48 1828 2
转载 @synchronized
如果你已经使用 Objective-C 编写过任何并发程序,那么想必是见过 @synchronized 这货了。@synchronized 结构所做的事情跟锁(lock)类似:它防止不同的线程同时执行同一段代码。但在某些情况下,相比于使用 NSLock 创建锁对象、加锁和解锁来说,@synchronized 用着更方便,可读性更高。译者注:这与苹果官方文档对 @synchronized 的介绍有少许
2017-02-23 13:11:41 227
原创 controllers间通信-delegate、Notification、KVO比较
在不过分耦合的前提下,controllers间怎么进行通信。在IOS应用不断的出现三种模式来实现这种通信: 1.委托delegate; 2.通知中心Notification Center; 3.键值观察key value observing,KVOdelegate 优势 1.要委托的事件要在delegate协议中有定义 2.如果delega
2017-02-23 12:37:44 303
原创 常用排序算法
1、交换排序-冒泡排序 (1)思想:从待排数据自上向下对相邻的两个元素进行比较,必要时交换,使大的元素下沉,小的元素上冒。 第一次比较时,将待排数据中的最大的元素,沉到最低;第二次比较将第二大元素沉到最低,…… 所以如果有n个元素,进行n-1次排序;对于第i次排序,内部需要交换的次数为n-i-1; (2)代码//冒泡排序void bubbleSort(int a[], int n){
2017-02-23 10:13:28 218
转载 OC实现的各种简单常见的排序算法
//直接插入排序.每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。-(void)initDirectChaSort:(NSMutableArray *)array{ NSInteger j=0; for (NSInteger i=0; i<[array count]-1; i++) { if ([[array ob
2017-02-21 10:39:01 416
原创 KVO全家桶
1.Notification (1)A对B感兴趣,A就是观察者,B为主题也就是变化源 对于感兴趣的A来说,首先要订阅通知,即将自己添加为观察者(A是观察者,怎么观察的以及观察到了会做些什么) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notice:) name:@"tongzhi" obje
2017-02-20 16:41:00 389
转载 消息转发-什么时候会报unrecognized selector的异常?
简单来说:当调用该对象上某个方法,而该对象上没有实现这个方法的时候, 可以通过“消息转发”进行解决。 简单的流程如下,在上一题中也提到过:objc是动态语言,每个方法在运行时会被动态转为消息发送,即:objc_msgSend(receiver, selector)。 objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法
2017-02-20 16:03:30 14614
原创 iOS 集合的深复制与浅复制
iOS 集合的深复制与浅复制概念对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。一图以蔽之 再简单些说:浅复制就是指针拷贝;深复制就是内容拷贝。集合的浅复制 (shallow copy)集合的浅复制有非常多种方法。当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的
2017-02-20 15:48:01 248
转载 @property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的
@property 的本质是什么? “属性” (property)作为 Objective-C 的一项特性,主要的作用就在于封装对象中的数据。 Objective-C 对象通常会把其所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”(access method)来访问。其中,“获取方法” (getter)用于读取变量值,而“设置方法” (setter)用于写入变量值。在正规的
2017-02-20 15:08:22 1503
转载 64-bit Tips
64-bit Tips2014年12月20日 终究还是来了。Apple下发了支持64位的最后通牒:As we announced in October, beginning February 1, 2015 new iOS apps submitted to the App Store must include 64-bit support and be built with the iOS 8
2017-02-20 14:33:00 342
原创 宏的使用
枚举的宏定义 一、简介 NS_ENUM和NS_OPTIONS宏提供了一种简明、简单的方法来定义基于C语言的枚举和选项。 这些宏提高了Xcode中的代码完成性,并明确指定了枚举和选项的类型和大小。 此外,此语法以一种方式来声明枚举,该方式由旧编译器正确地计算,并且由更新的编译器来解释底层类型信息。 使用NS_ENUM、NS_OPTIONS宏定义枚举,有助于定义枚举的名称和类型; 如果
2017-02-20 14:29:01 854
翻译 instancetype与id
使用instancetype关键字作为返回类的实例的方法的返回类型(或该类的子类)。 这些方法包括alloc,init和类工厂方法。在适当的位置使用instancetype而不是id可以提高Objective-C代码中的类型安全性。 例如,考虑下面的代码:@interface MyObject : NSObject+ (instancetype)factoryMethodA;+ (id)factor
2017-02-20 14:20:59 233
转载 单链表功能大全
单链表很全的例子,增加,删除,排序,都有了#include <stdio.h> #include <stdlib.h> typedef struct node { int nDate; struct node *pstnext; }Node; //链表输出 void output(Node *head) { Node *p = head->pstnext
2017-02-19 13:53:36 399
原创 面试题4:替换空格
面试题4:替换空格题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy”,则输出“We %20are %20happy”。字符串是以“\0”结尾的,所以我们可以根据字符串的此特征来检查字符串是否到末尾,同时使用时注意不要越界,因为字符串在存储时比实际多一个字符。这个题目有两种实现方法,一种是在原来的字符串上做替换,二是创建新的字符串在新的字符串上做替换。如果
2017-02-19 13:18:35 133
转载 在既有类中使用关联对象存放自定义数据
有时需要在对象中存放相关信息。这时我们通常会从对象所属的类中继承一个子类,然后改用这个子类对象。然而并非所有情况下都能这么做,有时候类的实例可能是由某种机制所创建的,而开发者无法令这种机制创建出自己所写的子类实例。Objective-C中有一项强大的特性可以解决此问题,这就是“关联对象”(Associated Object)。可以给某对象关联许多其他对象,这些对象通过“键”来区分。存储对象值的时候,
2017-02-17 15:22:58 395
转载 手机热点开启,tabbar会下移20 px
当手机热点开启并被其他设备接入时,状态栏会比普通状态下多20px,此时整个视图控制器会被向下推20px,推出屏幕,即下面的tabbar会下移20 px。如果不做相应处理必然会带来糟糕的用户体验,基本思路:既然是状态栏的高度变化导致的,那就监听状态栏高度的变化,每当状态栏高度发生变化就发送一个通知,通知相应的页面调整UI。进一步思考监听状态栏高度变化可以用KVO或者RAC。如下:// 监听状态栏的f
2017-02-17 15:02:18 2996
原创 iOS设计模式-工厂方法
工厂方法1、定义 工厂方法中定义创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例化延迟到其子类2、何时使用 (1)类想让子类决定在运行时创建什么 (2)编译时无法确定创建对象的类型客户想要某种产品(iPhone手机),它向简单工厂发出制作iPhone手机的命令,然后工厂制造相应的手机BaseDevice 抽象手机:需要空实现协议;是工厂的产品 PhoneProtocol协
2017-02-17 14:47:59 334
原创 对象等同性判断
(1)“==” ==操作比较的是两个指针本身,即对象存放的地址,而不是其所指的对象。应该使用“isEqual:”方法来判断两个对象的等同性。 下面一个例子可以说明==与等同性方法之间的差别 NSString *str1 = @"bound 123"; NSString *str2 = [NSString stringWithFormat:@"bound %@",@"123"]; NSL
2017-02-17 14:28:26 450
原创 iOS设计模式-模板方法模式
模板方法模式 (1)定义 在模板中定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以重新定义算法的某些特定步骤而不改变算法的结构。 (2)主要思想 在抽象类(模板类)的一个方法中定义算法,在这个方法中调用的基本操作由子类重载予以实现。这个方法称为”模板“,--抽象类定义模版,子类重载基本操作以提供独特操作懂摸板方法调用(3)类图 ConcreteC
2017-02-16 09:45:31 448
原创 iOS设计模式-策略模式
策略模式 (1)定义 定义一系列算法,把它们一个个封装起来,并且是它们可以相互替代,本模式使得算法可独立于使用它的客户而改变(2)类图 Strategy类声明了它所支持的或相关的算法的一个共同接口。 ConcreteStrategyA(B\C)具体的策略类通过策略接口来实现相关的算法 Context类:context类的对象配置有一个具体策略对象的实例场景对象通过策略接口调用由具
2017-02-15 16:54:11 273
原创 iOS设计模式-责任链模式
(1)定义 责任连模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间发生耦合,此模式将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。(2)主要思想 对象引用了同一类型的另一个对象,形成一条链。链中的每个对象实现了同样的方法,用于处理对链中第一个对象发起的同一个请求;如果某个对象不知道如何处理请求就把请求传给下一个响应器(3)类图 Ha
2017-02-15 16:01:44 463
原创 iOS设计模式-中介者模式
1.中介的重要性例子,房子的卖家与买家,如果有2位买家,2位卖家,如果没有中介者,他们彼次之间会产生各种关系 买家A2 (9000-12000) 买家A1 (8000-10000) 卖家B1 (8000-11000) 买家B1 (9000-12000)如果卖家1和卖家2均售价9000,那么会出现A1—B1,A1—B2,A2—B1,A2—B2 如果卖家1和卖家2均售价8000,那么会
2017-02-15 14:19:51 511
原创 iOS设计模式-建造者模式
1、引例: 汽车,是一个很复杂的对象,它有很多的部件,车轮、发动机、座椅、车门、油箱等等;它的组装过程也很复杂(需要专业人士按步骤进行装配),建造者模式就是为了将部件和组装过程分开的。同样的,我们使用的计算机也一样,有很多的部件,组装过程也很复杂(当然,对于我们这样的专业人士可能感觉不复杂);本文例子:建房子,有打地基,建造房子,装修;设计师(Director)知道建造过程,总承包商知道需要
2017-02-15 14:16:16 345
原创 iOS设计模式-访问者模式
访问者模式1.定义 它表示一个作用于某对象结构中的各个元素的操作,它让我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作 2.理解这用于某个对象结构中的元素数目比较固定(基本不会变动),而对于这些元素的操作可能要变化(增加新操作),vistor提供了在某个状态下,对对象结构中各元素的不同操作的访问接口,对象中使用accept接口接受一个具体的访问者。符合open-close原则。访问者
2017-02-15 14:10:33 752
原创 iOS设计模式-装饰模式
装饰模式 引例:我们拍了一种照片,当场不会想如何装饰它,但是当照片冲洗出来后,我们会想给它加一个玻璃相框中。但是后来又想将它放进一个木头相框中。虽然相框换了,但是照片没变,因为只是往照片添加了东西,而并没有改变它。 在面向对象的软件中,向对象添加“东西”(行为),而不破坏其原有的内容,这样就得到一个加强版的对象(带相框的照片)。任何“东西”(相框)均可动态添加和删除。这就是“
2017-02-15 14:08:54 282
翻译 iOS设计模式-迭代器
一、介绍 迭代器:提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示.(便利集合中元素的只能从集合本身转移到迭代器对象。迭代器定义了一个用于访问集合元素并记录当前元素的接口。不同的迭代器可以执行不同的遍历策略。 提供一种方法顺序访问一个聚合对象中得各个元素,而又不需暴露该对象的内部表示。 ) 分类 外部迭代器:让客户端直接操作迭代过程,所以客户端需要知道外部迭代器才
2017-02-15 10:14:54 548
原创 观察者模式
一.观察者模式介绍 二.在iOS中框架中使用观察者模式 在iOS中框架中使用观察者模式的有:Notification、KVO。1.Notification (1)A对B感兴趣,A就是观察者,B为主题也就是变化源 对于感兴趣的A来说,首先要订阅通知,即将自己添加为观察者(A是观察者,怎么观察的以及观察到了会做些什么) [[NSNotificationCenter defaultCenter]
2017-02-14 15:03:27 190
原创 iOS中视图切换的四种方式
iOS中常用的四种视图切换的方式有UITabBarController、UINavigationController、模态窗口以及添加为子视图的方式 一、简单分析一下各自的原理: * UITabBarController:以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在界面上,相对比较占用内存。 * UINa
2017-02-09 16:06:41 3245
翻译 8个敏捷开发的最佳实践
总结的国外的敏捷开发资料且翻译成中文:The CIO’s Guide to Becoming a Trailblazer 资料下载:http://download.csdn.net/detail/u011774517/9747734下面谈谈我对翻译的内容“8个敏捷开发的最佳实践”的理解,我会逐条写下自己的理解敏捷应用开发的最佳实践 1、专注于客户--注重客户或者说是重视应用的最终用户体验
2017-02-06 09:34:13 9457
搜索某个目录下所有文件中的每一行是否包含某个字符串,适用于xcode工程中搜索使用某个api的搜有文件列表
2023-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人