ios笔记整理

来源:互联网 发布:手机视频快进软件 编辑:程序博客网 时间:2024/05/22 17:49

一.内存管理情况

1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象。当用户的代码运行告一段 落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁。

2-成员属性:
    readonly:不指定readonly,默认合成getter和setter方法。外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全性。相当于私有成员?
    assign:表示只进行简单的赋值,不会发送retain消息。
    retain:会向旧值发送release消息,向新值发送retain消息。
    copy:向旧值发release消息,向新值发送copy消息。

3-引用计数特殊情况
    NSArray:当把一个对象添加到NSArray时,对象的引用计数会加1,移除时会减1。
    UIView:addGestureRecognizer会对手势识别器的引用计数加1,removeGestureRecognizer会减1。


二.容器


    -NSArray和NSMutableArray
        +array:创建一个空数组
        +arrayWithArray:从另一个数组创建新的数组
        +arrayWithContentsOfFile:读文件创建数组
        +arrayWithObject:创建一个数组,其中包含一个给定对象
        +arrayWithObjects
        +arrayWithObjects:count: 从C数组创建
        -containsObject:是否包含一个元素
        -count:数量
        -lastObject:返回最后一个
        -objectAtIndex:返回某一个
        -objectsAtIndexes:返回一组,类型为NSArray
        -indexOfObject:返回对象索引
        -arrayByAddingObject:原数组最后加一个对象,产生一个新的数组
        -arrayByAddingObjectsFromArray:在原数组的最后添加另一个数组中的所有对象,产生一个新数组
        -subarrayWithRange:抽取原数组中得一部分,产生一个新的数组
        -isEqualToArray:比较两个数组是否相同
        -writeToFile:atomically:保存数组至一个文件
        -writeToURL:atomically:保存数组至一个URL
        -addObject:在数组最后添加一个对象
        -addObjectsFromArray:在原数组最后添加另一个数组的全部对象
        -insertObject:atIndex:向原数组制定位置添加一个对象
        -insertObjects:atIndexes:向原数组中一系列位置添加一系列对象
        -removeAllObjects:移除数组中的全部对象
        -removeLastObject:移除数组中最后一个对象
        -removeObject:移除一个对象
        -removeObjectAtIndex:移除位于指定位置的对象
        -removeObjectsAtIndexes:移除位于一系列位置的对象
        -replaceObjectAtIndex:withObject用给定对象替换位于指定位置的对象
        -replaceObjectsAtIndexes:withObjects:多对象,多位置版本
        -setArray:用另一个数组中的所有对象来替换当前数组中的所有对象
    -NSDictionary与NSMutableDictionary
        +dictionary
        +dictionaryWithContentsOfFile
        +dictionaryWithContentsOfURL
        +dictionaryWithDictionary
        +dictionaryWithObject:forKey
        +dictionaryWithObjects:forKeys
        +dictionaryWithObjectsAndKeys
        -count:数量
        -allKeys:返回一个数组,包含字典中的所有关键字。
        -allKeysForObject:返回一个数组,包含所有对应到给定对象的关键字。
        -valueForKey:通过字符串查找数值。
        -writeToFile:atomically
        -writeToURL:atomically
        -setValue:forKey: 加键-值对
        -addEntriesFromDictionary: 添加另一个字典中得所有条目
        -setDictionary:将原字典中条目设置为另一个字典中得所有条目
        -removeObjectForKey:移除一个关键字的对应条目
        -removeAllObjects:移除所有条目
        -removeObjectsForKeys:移除一系列关键字的对应条目

三.并发编程

    1-GCD-Grand Central Dispatch,GCD使用队列来管理多个任务,而每个任务是以块(其定义类似于函数)来描述的。GCD从队列中读取这些要完成的任务,然后其多核执行 引擎负责将这些任务分配给它所管理的线程。和手动线程管理相比,GCD能极大地优化线程管理,并极大地减少创建和销毁线程所带来的额外开销。除了在多核系 统上得性能改进之外,GCD还能帮助提高应用的响应速度,并让代码更为干净,易于维护。
    2-NSOperationQueue-操作队列,可以极大地减少开发者在并发编程中的负担,并且操作队列有一套Objective-C的API,使用起来方便。
    基本操作单位-NSOperation,操作。
    操作是封装了一个与任务有关的代码与数据的抽象类,需要继承NSOperation,并且描述相关的任务。操作对象是一次性的,它只能执行一次,下一次,需要创建一个新的实例。
    可以通过addDependency:方法为操作添加相互依赖性。假设操作A依赖于操作B,如果操作B没有结束,操作A就不会开始执行。完成是指 执行完,或者取消了操作。有时需要对操作是否成功作出判断。通过removeDependency:方法来移除操作的相互依赖性。
    操作的一个属性是isConcurrent。当使用操作队列来管理这些操作时,isConcurrent应当设置为NO,这时应当重载 NSOperation的main函数(在类中保存controller对象-weak,并在main中调用controller的方法)。 isReady属性用于描述操作是否已经可以开始执行,isExecuting属性表示操作是否正在执行当中,isFinished属性表示操作是否顺利 完成,isCancelled属性则表示操作已经取消。
    可以在操作运行中取消它的运行,只需要给它发送cancel消息即可。在继承NSOperation类时,也需要支持cancel方法。
    如果只需要简单的操作,不想继承NSOperation类,可以使用NSInvocationOperation类,这个类中的-initWithTarget:selector:object:方法能帮助你方便地选择人物的对象和相应的功能。
    操作的执行顺序取决于各自的优先级和相互之间的依赖性。
    操作队列有两种方式来执行其中的操作。第一种是开辟新线程来运行这些操作,第二种则是通过GCD来运行这些操作。但是无论如何,都不需要手动管理 线程。尽量使用操作队列,只有在操作队列的效率明显不足时才转向GCD。因为操作队列是封装在GCD的基础之上的,虽然增加了一些额外开销,但是也具有更 加完善的功能。例子是TestNSOperation。


0 0
原创粉丝点击