A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 651809022 初级黑马   /  2016-3-23 17:13  /  1545 人查看  /  15 人回复  /   5 人收藏 转载请遵从CC协议 禁止商业使用本文


下面的答案有错误的和不够完整的请见谅,本帖仅供参考。

如果想要更详细的,把问题放到百度

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型除外.



*/





15 个回复

倒序浏览
回复 使用道具 举报
谢谢分享,太好的资料了
回复 使用道具 举报
学习了  收藏
回复 使用道具 举报
谢谢啊!
回复 使用道具 举报
有点多.先回复慢慢看
回复 使用道具 举报
先收藏了,基础班有学这么难吗?我看网上的视频教程没讲这么多概念啊。。。
回复 使用道具 举报
谢谢资料
回复 使用道具 举报
给楼主赞个。。。。。。。。。。。。
回复 使用道具 举报
很好的一个总结 谢谢
回复 使用道具 举报
受用了,,,,,,,,,赞一个
回复 使用道具 举报
赞一个,谢谢亲~~~
回复 使用道具 举报
感谢分享
回复 使用道具 举报
tdwydan1 来自手机 中级黑马 2016-3-26 21:43:39
14#
新接触啊
回复 使用道具 举报
没少下功夫,哥们向你学习
回复 使用道具 举报
谢谢啊!!!真的很有用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马