Objective - C 一一 OC增强简答题

1.请写出ARC 的中英文全称

:ARCAutomatic Reference Counting 自动引用计数


2.内存管理的原则是什么?

答:只要出现new,alloc,copy,retain,就要配对release操作,或者autorelease操作


3.什么时候对象内存计数器会增加?

答:当进行alloccopymutableCopyretain


4.创建一个对象需要经过那三个步骤?

:

   1.开辟内存空间

   2.初始化参数

   3.返回内存地址值。


5. .什么是野指针?什么是僵尸对象?什么是空指针?

答:野指针错误:访问了一块坏的内存(已经被回收的,不可用的内存)。

僵尸对象:所占内存已经被回收的对象,僵尸对象不能再被使用。(打开僵尸对象检测)

空指针:没有指向任何东西的指针(存储的东西是0,nullnil),给空指针发送消息不会报错


6. Set方法的作用是什么?Set方法的好处?

答:Set方法的作用:为外界提供一个设置成员变量值的方法。

Set方法的好处:

1)不让数据暴露在外,保证了数据的安全性

2)对设置的数据进行过滤


7. Get方法的作用是什么?

答:Get方法的作用:为调用者返回对象内部的成员变量


8. 结构体当中能定义oc对象吗?

答:

不能, 因为结构体当中只能是类型的声明不能进行分配空间


9.什么是构造方法,使用构造方法有什么注意点。

:

什么是构造方法:构造方法是对象初始化并返回对象一个实例的一个方法。

构造方法有什么用: 一般在构造方法里 对类进行一些初始化操作

注意点:方法开头必须以init开头,接下来名称要大写 例如 initWithName initLayout


10.请说明NSSetNSArrayNSDictionary的区别?

:NSSetNSArrayNSDictionary都是属于不可变集合类(在创建完集合类后就不能够对他们进行修改),在集合类里只能添加对象元素不能添加基本数据类型。

  NSSet :

  1.是一个无序的集合

  2.在内存中存储的地址是不连续的

  3.并且添加进去的元素是不可重复的

 

NSArray 

 1.是一个有序的集合

 2.在内存中存储的地址是连续的,添加的元素是可重复的

 3. NSArray支持通过下标访问元素。

 4. 如果想知道一个元素是否存在这个数组当中的话,那么需要遍历整个数组一个个去判断,这样显然效率低下。

 NSDictionary

 1.是一个无序的集合

 2.它的数据存储方式是key value 键值对的方式进行存储的

 3.key 在整个NSDictionary 里是唯一的,如果key发生重复,那么后添加的元素会覆盖之前的。

 


数组数据结构,查询快,插入慢。每次插入一个元素,后边所有角标+1

链表数据结构,查询慢,插入快,手拉手询问形式。



11.请说明 #include#import @class各自的作用

答:

#include :是C语言的预编译指令  告诉编译器导入相关的头文件  ,在OC 当中也能使用  因为OC 兼容C语法

#import GCC编译器提供 不管在一个文件中出现多少次,可保证头文件只被包含一次


@class :告诉编译器当前这个文件中 声明了这个类,但是类里面具体定义什么不知道,使用它能减少编译时间。


12.点语法本质是什么,写一个点语法的例子,并写上注释

: 点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成相应的setget方法,如果没有setget方法,则不能使用点语法。

例如有一个Person 通过@property定义了nameage属性,再提供了一个run方法。

Person *person = [Person new];

person.name=@”itcast”;//调用了personsetName方法int age = person.age;  //  调用了personage方法

person.run      //调用了personrun方法

13.@property 有什么作用

:1.让编译器自动生成与类成员变量相同名getter setter方法。

2.创建的成员变量是以_开头 它创建的默认修饰域是private

3.还能对对象内存进行管理。 


14.调用对象的release 方法会销毁对象吗?

答:不会,调用对象的release 方法只是将对象的引用计数器-1,当对象的引用计数器为0的时候会调用了对象的dealloc 方法才能进行释放对象的内存。


15.请说明自动释放池autorelease的作用,和工作机制,它与release有什么不同?

答:自动释放池:添加到该池中的对象在作用域结束时,会自动释放池中所有对象的内存。

  autoreleaserelease没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减1


16.请简述什么是协议?

: 类似于Java语言里的接口,在协议里只能定义方法不能定义属性,并且在协议里写的方法都是公开抽象的,需要具体的类去遵循这个协议实现协议里的方法。在协议里定义的方法可以是可选实现和必须实现的,默认是可选的。


17.id类型是什么,instancetype是什么,有什么区别?

答:id类型:万能指针,能作为参数,方法的返回类型。

instancetype:只能作为方法的范围类型,并且返回的类型是当前定义类的类类型。

18.成员变量名的命名以下划线开头的好处?

答:(1)与get方法的方法名区分开来;

2)可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。


19.Self的用途是什么?

答:(1)可以利用self->成员变量名访问当前对象内部的成员变量(仅在对象方法中)

(2)[self 方法名];可以调用其他的对象方法或者是类方法


20. Super关键字的作用?

答:

Super关键字的作用:

1)直接调用父类中的某一个方法

2Super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

white camel

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值