下面的答案有错误的和不够完整的请见谅,本帖仅供参考。
如果想要更详细的,把问题放到百度
1.OC对比C语言多了什么数据类型?
// BOOL block
2.#include与#import的异同点是什么?
/*
import 与include的区别
1.include是在C语言中.而import是在OC中,且仅在OC中使用,而include则C与OC都可以,因为OC兼容C.
2.include并没有做重复包含优化,需要自已用条件编译与宏定义去实现.而import自已内部已经实现了.
相同点:
1.都是预处理指令
2.都是文件内容拷贝
*/
2.OC是一门什么样的语言?面向对象与面象过程的区别是什么?
//面向对象的语言 面向对象是只关心找谁去完成 面向过程是自己怎么完成每一步的过程
3.什么是类,什么是对象?
//类是具体事物的抽象 对象是该类事物实实在在的个体
4.一个类主要有哪些部分组成?
//类声明与实现
5.一个类可不可以没有声名?可不可以没有实现?
// 可以没声明 但是不能没有实现
6.类的属性又称为什么?可不可以在定义时赋值?定义时默认是多少?
//实例变量 不可以在定义时同时赋值 0
7.方法有哪两种?有什么区别?
/*
两种
类方法以 + 开头,类方法是由类名调用,类名对是象名
2 对象方法以 - 开头,对象方法是由对象调用
类方法和对象方法可以同名
*/
8.方法与函数有什么区别?
9.用什么表示对象?什么叫匿名对象?
//匿名对象:仅用来实现对象方法或者作为方法的参数时使用的对象,只能在创建时使用一次,访问类的实例变量无意义
10.内存主要分为哪几个区?对象在哪个区?
//五大区 栈区 堆区 静态区 常量区 代码区 2堆区
11.属性的作用域由什么控制?分别是什么?
// 权限控制 @public @package @private @protected
12.面向对象的三大特性是什么?
//封装 继承 多态
13.什么是继承?继承必须满足什么条件?
// 当A对象拥有B对象的所有声明 属性 与方法 而且A对象拥有独有的属性和方法 子类是父类
14.什么是组合(关联)?什么是依赖?
// 1当A对作为B对象的属性时 2当A对作为B对象的方法的参数和局部变量是
15.OC是的方法可不可重写?可不可以重载?(方法名相同,参数不同称为重载)
// 可已 不可以
16.属性能不能重写?
// 不可以
17.self与super的作用及区别?
/*
/*self的用法
self 可以在类中用来表示调用者,去调用方法.或属性.
注意: 当self调用属性时,只在对象方法中.因为类方法中不能用属性.
self调用属性,只表示类的对象.
super
表示:调用父类中的方法.
使用场合:
当子类重写父类的方法后,在某些情况下,又需要用到父类方法的功能.
注意:对象方法中只能调用父类的对象方法.类方法只能调用对象的类方法.
如果子类没有重写父类的方法,没有必要用super.用self.
所以只有在子类重写了父类方法的时候,我们调用父类方法,才要用super.
属性不能用super.因为子类不能重写父类的属性.
*/
18.什么是多态?多态的有什么作用?
// 父类的指针向了子类的对象 代码的拓展性和复用性强
19.多态要满足什么条件?
// 有继承关系 当父类指针指向子类对象时,父类必须要强转
20.多态中父类能直接访问子类独有方法及属性吗?
// 不能 必须强转
21.id指针是什么?有什么作用?
// 是OC一个指针--万能指针 用于表示任意的对象.类似于NSObject*, id本身已经封装好了一个*.不用加!!!
//可以动态调用子类的方法.调用子类独有方法时,不需要强转!
//注意:点语法除外!! 也就是id指针无法通过点语法给独有属性赋值.如果要使用,必须强转
22.id指针能使用点语法吗?能用调用子类独有方法吗?
//id指针无法通过点语法给独有属性赋值.如果要使用,必须强转.
//可以动态调用子类的方法.调用子类独有方法时,不需要强转!
23.类的本质上是什么?类的方法与属性内存的同一片区域吗?
/*
本质上还是一个对象.叫类对象.这个对象的类型:Class
类对象是在程序启动的时候加载的,与对象创建无关.
加载的标志:是load方法.
对象是在它被创建的时候加载的.且必须在类对象加载完成后才会加载.
对象加载会执行initialize方法. 只会在对象第一次创建的时候执行.
init :构造方法
构造方法是在对象被创建的时候执行的.对象每次创建都会执行.
注意:
1.一个类的实例对象被创建,则其父类的对象也会被创建.(直接或间接父类都会被创建)
2.分类的load方法不会覆盖主类的.主类与分类的load方法在程序启动的时候都会执行.
*/
24.OC中封装主要指的是什么?
//对属性的封装
//让一个属性不能让外部直接访问,而是由我们提供set与get方法去访问.
//好处:
//提高安全性 隔离的变化 提高复用性 便于使用
25.点语法的本质是什么?用点语法访问与赋值底层做了什么操作?
// 属性的调用 编译器自动替换为set 和get
26.@property有什么作用?
//编译器启动生成 set和get 方法
27.什么时候@property不起作用?
// 当自己写出标准的set和get 方法时
28.动态类型与静态类型的区别?举例说明?
//动态类型:编译时类型不确定,运行时才检测的类型,例如: id obj = [Person new];
//静态类型:编译时已经确定的类型,例如: Person *per = [Person new];
29.构造方法有什么作用?
//是一个对象在初始化的时候执行的方法.
30.重写构造方法的好处是什么?缺点呢?
//给属性初始化时可以赋值,优点:实现简单. 不足:不能够根据不同对象赋不同的值,属性的值是固定的.
31.为什么要自定义构造方法?要注意哪些问题?
/*优点:使用灵活,可以根据不同的对象给属性设定不同的值. 不足:写法比较麻烦一些.
注意:
自定义构造方法必须以init开头.而且,第二个单词首字母必须大写.--规则!
子类继承父类自定义构造的写法.
在子类里自定义构造时,要调用父类的自定义构造,而不是NSObject的init.这样才能隔离父类的变化.
而且,父类的属性可以保持私有化private.
*/
32.OC内存管理的目的是什么?什么叫内存泄露?
// 防止内存泄露 当一个对象不在使用时,这个对象没有被销毁,空间没有释放时,这就叫内存泄露
33.OC内存管理分为哪两种?
// 手动管理 MRC 自动管理 ARC
34.MRC内存管理的目的及原则是什么?
//防止内存泄露,
//内存管理的原则:不再使用的对象必须销毁,释放内存.
35.ARC内存管理的机制是什么?
//以下添加或减少计数器值的方式,不再需要手动添加,全不能手动添加,编译器全部帮你实现.
36.内存管理的方法有哪些?这些方法能不能在ARC里使用?
//retain,release,dealloc
37.对象在释放时调用哪个方法?MAC与ARC下重写这个方法要注意什么问题?
//dealloc
38.什么叫僵尸对象?
//僵尸对象:当一个对象的引用计数变为0(MRC)或者没有被强指针指向时,其所占用的内存就会被系统回收.但是系统在没有新对象使用该空间前不会初始化该内存区域,原对象的数据信息仍会保留,通过原有的指针,可能仍可以访问到被释放对象的信息,这时候就称这个对象为"僵尸对象".对于僵尸对象,编译器并不会报错,需要在Xcode界面中设置开启僵尸对象检测
39.什么叫野指针?什么叫空指针?
//OC中的野指针就是指向僵尸对象的指针或者未赋值的指针(类似于C中的野指针)
40.什么叫强指针?什么叫弱指针?分别用什么表示?
ARC
//强指针:__strong 对象被销毁之后,指针仍然指向那片内存区域.成为野指针. (默认)
//弱指针:__weak 对象被销毁后,指针不再指向那片内存区域,成为空指针nil;
//注意:strong和weak都只能用于oc对象.非oc对象仍然用assign. 如:基本数据类型.
MRC
//强指针:retain :表示自动生成set方法的内存管理,表示会自动release旧值,retian新值 .只用于OC对象
//弱指针:assign: 不生成自动内存管理.非OC对象.(不加默认是这个)
42.@property的参数是要有哪几类?分别是什么?有什么作用?
/*
参数:
内存管理相关:
retain :表示自动生成set方法的内存管理,表示会自动release旧值,retian新值 .只用于OC对象
assign: 不生成自动内存管理.非OC对象.(不加默认是这个)
copy :表示自动生成set方法的内存管理,表示会自动release旧值,copy新值
强指针:__strong 对象被销毁之后,指针仍然指向那片内存区域.成为野指针. (默认)
弱指针:__weak 对象被销毁后,指针不再指向那片内存区域,成为空指针nil;
跟权限相关:
readonly:只读.不自动生成set方法,只生成get方法
readwrite:可读可写:自动生成set与get方法 (不加默认是这个)
跟多线程相关:
nonatomic:不同步,性能更高.--推荐
atomic:同步 性能更低. (不加默认是这个)
跟get与set方法命名相关:
getter=get方法名 表示生成你自定义的get方法名.不再是原有的以属性名命名的方法
setter=set方法名: 表示生成你自定义的set方法名.
注意这个一般不设置. BOOL型除外.
*/
|