Objective-C学习笔记

记得一个师兄笔试的时候遇到过一些OC的基本题,最近看书呢正好看到这些,索性记录下来,便于以后回忆

  • #include 和#import

    这两个的作用类似,都是要求预处理器读取某个文件,一般会使用这两个指令到导入声明文件。

    区别就是,#import会保证预处理只导入特定的文件一次,而#include则不能保证,允许导入同一个文件很多次。因此OC中,尽量使用#import。

  • Constants-Prefix.pch

    在开发项目时,经常要为每一个代码文件导入一组特定的头文件,这会导致文件顶部的代码不够简洁,并延长编译所需的时间。为了简化文件导入并加快编译速度,Xcode加入了对预编译文件的支持,即Constants-Prefix.pch,凡是出现在这个文件中的文件,Xcode都会预先编译好并自动导入到每个文件中。

  • 回调

    NSRunLoop类,即运动循环类,该实例会一直运行等待着,当特定的事件发生时,就回向相应的对象发送消息。触发方式一般式回调 ,有三种回调方式。

      • 目标-动作(Target-action)
      • 扶助对象(Helper objects),委托对象(delegate)和数据源(data source)是常见的辅助对象
      • 通告(Notification):Apple提供了一种称为通告中心的对象,应用开始等待前,可以通过中心注册,当某个事件发生时,调用等待该通告的对象    
  •  Blocks和函数

    blocks是Objective-C引入的一种编程机制,类似函数,但是还是有很多不同的。block可以将回调函数写在调用处,便于查看,而回调函数则可能写在另外一个文件中,不利于查看。还有一点就是block对象是基于栈的,一般的如NSArray 的enumerateObjectsUsingBlock:或者NSNotificationCenter 的addObserverForName:object:queue:usingBlock:等时,会将传入的Block对象拷贝到堆中,这些函数得以保存指向保存于堆中的block对象指针。block对象经常使用外部创建的其他变量。而在执行block对象时,为了确保外变量始终存在,相应的block对象会捕获这些变量。对于基本类型的变量,捕获意味着程序会拷贝变量的值,并用block内部的局部变量保存;而对于指针类型变量,block对象会使用strong特性的引用。因此,在相应的block对象被释放前,这些对象一定不会被释放。

posted @ 2014-04-20 21:17  赵洪武  阅读(187)  评论(0)    收藏  举报