插入排序

  • 直接插入排序
    假设待排序的数据存放在R[0…..n-1],排序过程的某一中间时刻,R被划分成两个子区间R[0…i-1]和R[i…n-1],其中,前一个子区间是已排好序的有序区;后一个子区间则是当前未排序的部分,。直接插入排序的基本操作是将当前无序区的i号元素R[i]插入到有序区R[0…i-1]中适当位置上;(时间复杂度O(n^2),稳定排序)

直接插入排序

阅读全文 »

1、所有OC对象所占的内存总是分配在“堆空间”(heap space)中,而绝不会分配在“栈”中,不能在栈中分配OC对象,这点与C++不同:

NSString stackString; //错误,不能在栈空间分配对象;

2、使用类的向前声明(forward declaring)可以节省编译时间,也解决了两个类头文件相互引用的问题;

eg:如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,使用#import而非include指令虽然不会导致死循环,但却意味着两个类里有一个无法被正确编译;如果使用@class在两个类的头文件中相互声明,则不会有问题。

3、OC所有的collection拷贝都是浅拷贝,因为collection中也许会有不支持NSCopying的自定义类;

4、ARC只负责管理Objective-C对象的内存,尤其要注意:CoreFoundation对象不归ARC管理,开发者必须适时调用CFRetain/CGRelease;

5、实现缓存时应选用NSCache而非NSDictionary对象。因为NSCache可以提供优雅的自动删减功能,而且是线程安全的,此外,它与字典不同,并不会拷贝键;

6、计时器会保留其目标对象,等到自身“失效”后再释放此对象;调用invalidate方法可令计时器失效;执行完相关任务后,一次性的计时器也会失效。
注意:开发者若将计时器设置为重复执行模式,那么必须自己调用invalidate方法,才能令其停止;

一、KVC的基本概念

Key-value coding,它是一种使用字符串标识符,间接访问对象属性的机制,而不是直接调用getter 和 setter方法。通常我们使用valueForKey 来替代getter 方法,setValue:forKey来代替setter方法。

阅读全文 »

SSL协议简述   

为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议。SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密。这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容, 公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥。

阅读全文 »

  • git基本命令
    $ git init 初始化git
    $ git add 添加git索引,可以是文件,也可以是目录路径
    $ git commit 提交更改
    $ git remote add origin https://github.com/####/### 与远程github的repository关联
    $ git remote rm origin 删除与远程仓库的关联
    $ git push -u origin master 将本地项目push到远程仓库中的master分支中,可以替换成其它分支
阅读全文 »