- 博客(257)
- 资源 (17)
- 收藏
- 关注
原创 Effective Objective-C(第47-52条)系统架构,foundation、for-in、NSTimer
第47条:熟悉系统框架 若是不了解系统架构所提供的内容,那么就可能会把其中已经实现的东西再写一遍。将一系列代码封装为动态库(dynamic library),并在其中放入描述其接口的头文件,这样做出来的东西就叫框架。然而iOS应用程序不允许在其中包含动态库。 开发者使用最对的是Foundation框架,像NSObject、NSArray、NSDictionary
2014-08-10 15:13:57 2350
原创 Effective Objective-C(第41-46条)gcd大中枢派发、performSelector
OC中多线程编程的核心就是block与gcd。这虽然是两种不同的技术,但他们是一并引入的。block是一种可在C、C++及OC代码中使用的“词法闭包”(lexical closure),它极为有用,借此机制,开发者可将代码像对象一样传递,令其在不同环境(context)下运行。在block的范围内,它可以访问到其中的全部变量。 gcd是一种与block有关的技术,它提供了对线程的抽象,而这种抽象基于“派发队列”(dispatch queue)。开发者可将block排入队列中,有gcd负责处理所有调度
2014-08-10 15:08:59 1928
原创 Effective Objective-C(第37-40条)block在栈上?在堆上?
OC中多线程编程的核心就是block与gcd。这虽然是两种不同的技术,但他们是一并引入的。block是一种可在C、C++及OC代码中使用的“词法闭包”(lexical closure),它极为有用,借此机制,开发者可将代码像对象一样传递,令其在不同环境(context)下运行。在block的范围内,它可以访问到其中的全部变量。 gcd是一种与block有关的技术,它提供了对线程的抽象,而这种抽象基于“派发队列”(dispatch queue)。开发者可将block排入队列中,有gcd负责处理所有调度
2014-08-10 15:08:45 3925 4
原创 Effective Objective-C(第29-36条)内存管理篇,ARC、循环引用、引用计数
在OC这种面向对象语言里,内存管理是个重要概念。要像用一门语言写出内存使用效率较高且又没有bug的代码,就得掌握内存管理模型的种种细节。一旦理解这些规则,你就会发现,其实OC的内存管理没有那么复杂,再进入ARC之后就更为简单了。
2014-08-10 15:08:08 4004
原创 Effective Objective-C(第23-28条)类别、协议,代理,匿名对象、delegate
对象之间经常需要相互通信,而通信方式有很多。Objective-C开发者广泛使用一种名叫“委托模式”(Delegate Pattern)的编程设计模式来实现对象间的通信,该模式的主旨是:定义一套接口,某对象若想接收另一个对象的委托,则需遵从此接口,以便称为“委托对象”(delegate)。而这“另一个对象”则可以给其委托对象回传一些信息,也可以在发生相关联时间时通知委托对象。
2014-08-10 15:07:21 2694
原创 《Effective Objective-C 2.0》—(第47-52条)—系统架构,foundation、快速遍历for-in、NSTimer
collection使用无缝桥接快速遍历for-in的使用谨慎NSTimer的循环引用
2014-08-10 15:07:15 1027
原创 Effective Objective-C(第15-22条)接口与API设计、深拷贝、浅拷贝
近年来,开源社区与开源组件随着iOS开发而流行起来,我们经常使用别人的代码,别人也会看到你的代码。所以,我们要把代码写得清晰一些
2014-08-10 15:06:55 1917
原创 Effective Objective-C(第11-14条)动态绑定、objc_msgSend、消息转发机制
第11条:理解objc_msgSend的作用 在对象上调用方法是Objective-C中经常使用的功能。用Objective-C术语来说这叫做:“传递消息”(pass a message)。消息有“名称”(name)或者“选择子”(selector),可以接收参数,而且可能还有返回值。 由于Objective-C是C的超集,所以最好理解C语言的函数调用方式。C语言使用“静态绑定
2014-08-10 15:06:27 3859 1
原创 Effective Objective-C(第6-10条)对象、属性、equalToString、关联对象
用Objective-C等面向对象语言编程时,“对象”(object)就是“基本构造单元”(building block),开发者可以通过对象来存储并传递数据。在对象之间传递数据并执行任务的过程就叫做“消息传递”(Messaing)。
2014-08-10 15:04:00 2204
原创 Effective Objective-C(第1-5条)熟悉Objective-C
Objective-C通过一套全新的语法,在C语言基础上添加了面向对象特性。OC的语法中频繁使用方括号,而且不吝于写出极长的方法名,这通常令许多人觉得此语言较为冗长。这是这样写出来的代码非常易读,只是C++和Java程序员不太适应。 OC语言学起来很快,但有很多微妙细节需要注意,而且还有许多容易为人所忽略的特性。另一方面,有些开发者并未完全理解或是容易滥用某些特性,导致写出来的代码难以维护,难以调试。本章讲解基础知识,后续各章语言及其相关架构的各个特定话题。
2014-08-10 15:03:28 2038
转载 对比iOS网络组件:AFNetworking 和 ASIHTTPRequest
在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题。一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性。这些组件把复杂的网络底层操作封装成友好的类和方法,并且加入异常处理等。那么,大家最常用的组件是什么?这些组件是如何提升开发效率和稳定性的?哪一款组件适合自己,是 AFNetworking(AFN)还是 ASIHTTPRequest(ASI)?
2014-08-02 11:00:00 1504
原创 c语言实现tree数据结构
该代码实现了tree的结构,依赖dyArray数据结构。有first一级目录,second二级目录。dyArray的c实现参考这里点击打开链接 hashTable的c实现参考这里点击打开链接下面是跨平台的数据类型定义//// cpPlatform.h// dataStruct//// Created by hherima on 14-7-29.// Copyrigh
2014-08-01 11:23:20 5764
原创 c语言实现hashtable,类似C++的map和iOS的NSDictionary
跟线性数组和链表不同,HashTable是快速查找的数据结构。本文中的HashTable使用链表处理数组。该HashTable可以指定table的长度,提供了遍历的方法。包括table的长度的选择也比较讲究。 cp_int32 nPrime[MAX_HASH_PRIME_ARRAY_NUM] = { 17, 37, 79, 163, 331, 673, 1361 };就是说table的长度来取自上面这个数组。比如用户设定了200,那么ta
2014-07-30 17:00:17 3870
原创 关于Build Active Architecture Only属性
Build Active Architecture Only这个属性,设置为NO时,我知道会编译多个版本,不过打出来的包会大不少。这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。而设置为no时,会编译所有的版本。这个是设备对应的architecture:armv6:iPhone 2G/3G,iPod 1G/2Garm
2014-07-29 15:45:48 1563
原创 XML简明教程——文档对象模型——DOM和SAX(一)
SAX是基于事件解析XML文档的代表性技术。SAX通过扫描XML文档的内容,对元素,属性和文本数据内容等逐一分析和处理。
2014-07-29 12:45:36 1341
原创 c语言实现动态指针数组Dynamic arrays
基本原理:事先准备好一个固定长度的数组。如果长度不够的时候,realloc一块区域。另外:在数组元素减少的情况下,需要缩减数组长度。
2014-07-28 23:53:08 4445
原创 网络安全-安全散列函数,信息摘要SHA-1,MD5原理
本文绝大部分内容来自《网络安全基础——应用与标准》第五版——清华大学出版社。其中蓝色部门是自己添加安全散列函数单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要,数据指纹),还有数字签名(加强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5和SHA散列函数的要求 散列函数的目的是文件、消息或者其他数据块产生“指纹”。为满足在消息认证中的应用
2014-07-04 23:06:26 7236 1
原创 工程案例,设计模式——策略模式
策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。下面我将从xiang'mu
2014-06-26 17:10:24 1431
原创 IM软件业务知识—导航
概述导航的概念,大家不陌生。最常见的就是地图导航,可以引导用户怎么到达目的地。另外还有一些“导航”,比如hao123网站,这类是上网用的。IM软件设计中也有导航这一模块,模块作用跟上面两类相似,但是有一些不一样。IM软件中的导航主要是为了“存放Server接入地址;避免写死url,从而采用动态的配置”。IM软件在使用中必然使用到一个http地址,那么这些地址一般是从导航中获取的,而不是写死
2014-06-24 15:25:58 1993
原创 简单使用NSURLConnection、NSURLRequest和NSURL
下面是代码,注释也写得比较清楚://// HttpDemo.h// MyAddressBook//// Created by hherima on 14-6-23.// Copyright (c) 2014年 chinasofti. All rights reserved.//#import #import @interface HttpDemo : NSObjec
2014-06-23 13:30:54 2647
原创 浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图
session一般出现在计算机领域,IM软件中的session,老的IM有两层:首先是逻辑层的session来管理会话的参与者,消息列表,会话类型等等;还有协议层的session,主要是代表客户端跟服务器的一个事物通道。老的IM软件客户端跟Server交互的每一类操作都是基于会话。比如客户端登录,需要建立一个登录的会话;客户端发消息,需要建立一个会话。下面举例: 客户端向Serv
2014-06-19 15:39:45 4143
原创 如何使用iOS 8 指纹识别,代码、实例
跟想象的一样,iOS 8中的指纹识别使用起来还是很方便的,只需要一个接口就能搞定,屏幕上弹出一个模态的框,跟app store上的一样。直接上代码吧,下面代码拷贝自Apple的官方文档。需要添加LocalAuthentication.framework库,注意只有真机才有这个库,模拟器没有#import "LocalAuthentication/LAContext.h" LAC
2014-06-18 18:38:09 3419 1
原创 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest、Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字。算法基于一个数论:将两个大素数相乘非常容易,但要对这个乘积的结果进行 因式分解却非常困难,因此可以把乘积公开作为公钥,该算法能够抵抗目前已知的所有密码攻击。RSA算法是一种非对称算法,算法需要一对密钥,使用其中一个 加密,需要使用另外一个才能解密。我们在进行RSA加密通讯时,就把公钥放在客户端,私钥留在服务器。 RSA非对称加密算法,可
2014-06-17 15:46:33 5247
原创 浅谈IM软件的“假在线’
概述假在线,在不可用的网络情况下,IM软件仍显示在线。假在线是一个“在线——离线”之间的一个状态,在此期间,用户无法发送消息,给用户造成错觉假在线可以通过心跳(点击了解),缓解;之所以说缓解,是因为假在线没法根除。造成假在线的条件通常就是网络原因IM软件出现,假在线,给用户的感觉是,该IM软件不够聪明。有时候,用户知道网络不可用了,但是软件仍然没有反应过来。举2个例子:例1:用
2014-06-16 16:47:07 2798
原创 浅谈IM软件如何建立安全socket连接、登录
概述 14年3月份,在QQ发布带有“支付功能和设备锁”的版本的时候,当时就想写一下IM软件安全登录相关的博客。如今IM软件已经逐步称为一个平台,他的安全性不可马虎!今天有时间,写一段IM登录的文章吧 提到登录,作为IM软件第一步可谓首当其冲,用户密码在此处输入,安全意义不言而喻。登录信是最复杂信令之一,可以肯定的说,登录信令的应答码是最多的,不仅仅有200错误码,400错误码,
2014-06-16 16:09:09 6536
原创 [计算机名人]8位
谷歌首席工程师、搜索质量、排名和算法团队主管阿米特·辛格哈尔(Amit Singhal)日前表示,谷歌的即时搜索(Google Instant)服务坚持了谷歌的搜索算法原则,没有掺杂任何主观色彩,也不偏袒任何品牌。辛格哈尔表示:“谷歌多年来一直在努力,而且仍将努力的方向就是不在搜索算法中掺杂任何主观色彩。我们的搜索算法模型没有任何偏袒,完全是根据用户输入的字母进行搜索预测、进行概率统计。”谷歌
2014-06-10 18:24:20 17800
原创 浅谈IM软件客户端的断线重连、心跳和长在线
概述IM软件有一个基本的功能就是长在线,即只要有网络就保持登录,然而,网络状态是无法预测的,所以IM软件经常会有”离线“状态,尤其是手机客户端。当然,我只是列举了造成不能长时间在线的一个原因,还有比如:服务器更新,需要强制把客户端注销;还有本客户端被其他客户端踢;比如网络状况可用的时候,自动断线重连。目前的qq和飞信都有断线重连机制。断线重连的定义:1、用户已经成功登录IM
2014-05-27 11:30:59 10476 1
转载 iOS应用的crash日志的分析基础
如何获得crash日志如何解析crash日志如何分析crash日志 1. iOS策略相关 2. 常见错误标识 3. 代码bug
2014-05-23 16:51:29 1158
原创 浅析OC和C++的不同
总结一下:Objective-c和C++的不同之处,防止在面试的时候,不知道从何说起!1. 继承+虚函数问题。C++中只有父类是virtual修饰,子类才覆盖。OC中,都是虚函数,所以无需
2014-05-13 10:11:23 2156
翻译 工程链接静态库的时候,通过删除class来解决重复的符号的错误
工程链接静态库的时候,通过删除class来解决重复符号(duplicate symbol)的错误 如果你在工程中使用静态库,并且指定了编译选项为-all_load(为了让Objective-C的类别加载正确),静态库中,你的工程包含了一样的class名字,或者跟其他静态库中,有相同的class名字。在链接静,肯定遇到过类似于这样的错误“duplicate symbol”错误。
2014-04-17 18:32:48 3761
转载 iOS唯一标示符引导
概述在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”。unique Identifier即将退出,苹果给了我们Vendor和Advertising identifier两个选择,但应该用哪一个?文档并没有给出确切答案,具体使用哪个完全由你根据自
2014-03-24 17:20:38 1357
转载 iOS 获取手机的型号,系统版本,软件名称,软件版本
需要头文件#import //手机序列号NSString* identifierNumber = [[UIDevice currentDevice] uniqueIdentifier];NSLog(@"手机序列号: %@",identifierNumber);//手机别名: 用户定义的名称NSString* userPhoneName = [[UIDevice currentD
2014-03-24 16:57:38 1782
转载 linux socket 错误码
errno.00 is: Successerrno.01 is: Operation not permittederrno.02 is: No such file or directoryerrno.03 is: No such processerrno.04 is: Interrupted system callerrno.05 is: Input/output error
2014-03-24 15:05:16 6192
原创 protocolBuf 在iOS上的使用入门、讲解、指南
PB一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。支持C++、Python、Java三种语言。Protocolbuf 比XML● 更简单● 小3-10倍● 快20-100倍● 更少的歧义● 可以方便的生成数据存取类下面是iOS上使用的ppt截图,有需要原件的请留言!iOS的详细环境配置见 http://blog.csdn
2014-03-19 15:45:09 4746 1
原创 打印枚举中每一项的文本值
开发中经常遇到打印枚举的log,由于枚举是编译时候的,编译后并不会成为符号变量。这是Stack Overflow上网友的回答:Enumerations in C are numbers that have convenient names inside your code. They are not strings, and the names assigned to them in the
2014-03-19 15:03:58 6647
转载 iOS:KVO的概述与使用
一、概述KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。二、使用方法系统框架已经支持KVO,所以程序员在使用的时候非常简单。1. 注册,指定被观察者的属性,2. 实现回调方法3. 移除观察三、实例:假设一个场景,股
2014-03-19 09:58:52 1207
原创 智力题总结——求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
面试的时候遇到这个问题,其实很简单,但是条件太苛刻,这完全是个智力题:题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。其实会有很多种解法,有构造函数办法的,但是下面给出了一个简单的代码-----巧用递归算法和条件判断。#include #include
2014-03-11 13:18:48 1602
原创 问题:客户端从服务器分页获取列表,如何保证流量最少,且客户端和Server数据的一致性?
遇到一个典型问题:客户端从Server分页拉取一组数据
2014-02-14 10:40:43 2264 1
树tree、动态数组dyArray、hashMap、拼图算法
2014-08-15
core-data和sqlite3性能对比demo
2013-06-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人