IOS学习笔记

IOS学习笔记html


标签:源代码 编译器 C语言 处理器程序员

原创做品,容许转载,转载时请务必以超连接形式标明文章 原始出处 、做者信息和本声明。不然将追究法律责任。http://jjsun.blog.51cto.com/8697643/1630514数据结构

1、程序源代码以C语言为例,是如何转换为机器可执行的代码?
答:
C源代码 -> 预处理器 -> 编译器 -> 汇编器 -> 连接器 -> 转换为可执行的文件
1. C源代码通过预处理器其结果,仍是C语
2. 预处理器通过编译(句法, 词义分析, 代码的优化,代码生成),其结果是汇编代码
3. 汇编代码通过汇编器其结果是中间代码(.o),其本质上也是二进制代码
4. 中间文件(.o)通过连接器的连接, 最后生成可执行的文件。
2、C语言里比较灵活的一块内容是指针,那么请谈谈你对指针的理解。
回答这个问题的思路:
一、什么是指针,指针的基本概念
二、指针的使用场景
三、结合具体例子说明指针能解决哪些问题
四、关于指针运算的问题
3、C语言内存布局

一、代码区:主要存放代码,也就是程序指令,这个区的数据是只读。
二、数据区:已初始化区和未初始化区。声明全局变量的时候,同时给出了值,那 这个变量就放到已初始化区。未初始化区:BBS,这个区的变量,默认状况下所有初始为零。
三、堆区:程序员接触最多的区域,malloc函数就是从这个 区来分配内存的,这个区从下到上扩展。
四、栈区:由系统来管理的内存区域,局部变量和函数也存在这个区,特色是先进后出。
五、命令参数及环境变 量区
4、C语言中const 关键字的理解
a、对于非指针变量的修饰,const int myInt与int const myInt表达的含义是同样的,都表示myInt是一个常量。不能修改myInt的值。推荐使用const int myInt.
b、对于指针变量的声明,有四种状况,以int*为例:
一、const int *pMyPointer
二、int const *pMyPointer
三、int * const *pMyPointer
四、const int * const pMyPointer
对于一、2两种状况,所表达的含义是同样的,都是指指针指向的内容不能修改。
对于第3种状况,所表达的含义是说指针自己不能再指向其它地址。
对于第4种状况,表示指针指向的内容不能修改,同时指针自己也不能再指向其它地址。
5、在继承语法中,关于OC的方法调度机制
一、每个对象,都有一个指针指向其类
2.当向对象发送消息, 对象准备执行方法的时候,它会先在当前对象对属的类中查找这个方法, 若是找到话就开始执行, 若是没有找到的话, 就去对象所属类的父类去查 找, 若是找到就执行, 若是没有找到, 则会沿着继承链一层一层的向上去查找, 直到NSObject 类, 若是找到则执行, 若是没有找到, 则首先编译器会给出一个警 告, 若是忽略了这个警告,则在运行时程序会崩溃。
6、在继承中, 子类对象是如何使用父类声明的成员变量的?
在建立一个新类的时候, 其对象会首先从父类中继承成员变量, 而后添加自身的成员变量。
7、谈谈你对OC中self 和 super的理解?
1.self 首先他是一个指针。
2.当向对象发送消息, 对象去调用对应的方法的时候, 在调用方法中, 在这个方法里,隐藏传了一个指针, 这个指针就是self,这个self 表明的是调用这个方法的消 息接收者。
3. 有时候, 咱们须要在子类里显式的调用父的方法, 这个时候 super能够表明父类, 须要注意的是, 这个super不是指针,也不是成员变量, 而它只是编译器识别的 指令, 主要就用于子类访问父类的内容。
8、请问#include"header.h"和#include<header.h>有什么区别?在OC中#import又有什么特色?
    一、#include 属于预处理指令。主要功能是导入头文件内全部的内容, 其本质是将头文件的内容原封不一样的复制到实现文      件(.c .m .cpp .mm)
     2.#import与#include的功能和本质是同样的。
     3.#include "header.h" 双引号括起来。 由于要导入头文件的内容, 因此须要找到头文件的位置,对于双引号, 预处理器会      首先从当前工程的路径下去查找相应的头 文件, 若是没有找到, 则去系统的头文件目录查找。
     4.#include <> 尖括号同, 预处理器会直接从系统头文件目录去查找头文件的位置
     5.#include "" 通常状况主要用于导入自定义的头文件。 #include <>主要用于导入系统头文件,那么#include预        处理指令, 在文件相互依赖的时候, 容易出现重复 包含的错误, 为了解决这个问题, C语言引入了头文件卫士的机         制#ifndef #define #endif.
      6.#import主要的特色是, 不须要使用头文件卫士就可达到不重复包含头文件。从本质来讲, 他的内容已解决了重复包含的问题, 因此在OC语言里, 咱们主要推荐使用 #import
9、谈谈你对OC程序语言内存管理机制的理解。
一、每个对象都有与之相关的整数,咱们称这个整数为引用计数器或保留记住器
二、当某段代码或者某个对象,须要访问这个对象的话,会将此对象的引用计数器加1.
10、什么是自动释放池,机制是什么?
     自动释放池相似一个容器(相似栈的数据结构),当一个对象,不能肯定它在何时销毁,或者销毁会使代码实现变得更加复杂,此时就能够向对象发送一个 autorelease消息,那么这个对象将会被放到自动释放池里,当自动释放池销毁的时候,会向池子里的全部对象发送一个release消息,来确保对象内存的销毁,那么自动 释放池销毁是有规律的,一般都是在一个事件循环自动完成以后,进行销毁和建立。
* 在iPhone 应用开发中尽可能不要使用自动释放池。
11、手动管理内存的规则是什么?
一、 若是建立了一个对象, 就必须考虑到要释放这个对象。若是使用了new , alloc , copy 方法得到到了一个对象, 则必须释放或者是自动释放此对象。
2. 若是对建立的对象,发送了retain消息,那么必须对此对象发送release消息,保证retain 和 release的使用次数是相同。 3.鉴于,new , alloc , copy方法的特殊性, 因此咱们程序中通常的方法, 不要使用这个三个关键字开头, 除非咱们的方法也是建立对象。
十二、类别的做用
1. 为现有的类(不必定都是自定义的类,还能够是系统定义的类, 或者是第三方提供的类)添加新的行为 2. 可能将类的实现(复杂的、比较大的工程)分散到不一样的文件里来实现,或者不一样的框架中来实现
3. 能够建立对私有方法的前向引用(通常状况, 作越狱开发常常用到这个功能)
4. 能够建立NSObject的类别,(向对象添加非正式协议)
      类别有两个局限性
1. 没法向类别中添加新的实例变量,类别没有位置容纳实例变量
2. 名称冲突 类别具备比较高的优先级。框架

相关文章
相关标签/搜索