oc面试题

11 篇文章 0 订阅

1.类别和类的延展的区别?
category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级
延展通常是为类添加私有实例变量或属性或方法的一种方式,可以添加方法,也可以添加实例变量

2.Objective-C的类可以多继承吗?可以实现多个接口吗?category是什么?
Objective-c只支持单继承(如果要实现多继承的话,可以通过类别和协议的方式来实现,cocoa中所有的类都是NSObject 的子类,多继承在这里是用protocol 委托代理来实现的。)
category:分类,类目。通常是为不知道源代码的类扩充功能(添加方法)的一种方式.

3.Objective-C属性特性有哪些??
1.)读写特性 getter=getName,setter=setName,设置setter与 getter的方法名;
readwrite(默认的),readonly,设置可供访问级别
2.)原子特性 nonatomic非原子性(苹果推荐使用,不保证线程安全);
atomic,原子性(默认的,保证线程安全)
3.)语义特性 assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型循环引用问题;
retain(针对对象类型)setter方法对参数进行release旧值再retain新值;
copy(针对服从NSCopying协议的对象类型)

4.自动释放池是什么?如何工作?
当向一个对象发送一个autorelease 消息时,Cocoa就会将该对象的一个引用放入到最近的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。

5.写一个setter方法用于完成 @property (nonatomic,retain)NSString * name
- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
}
6. Object-C如何对内存管理的, ARC 和 None-ARC的内存管理的区 别在哪里
OC内存管理机制:垃圾回收和引用计数
iOS采用引用计数机制。引用计数机制分ARC和MRC.
ARC:自动引用计数(自动管理内存)
由开发人员开辟空间,但是系统会自动释放内存,本质上是基于MRC,系统默认(苹果推荐使用的方式)
MRC:手动引用计数
由开发人员开辟空间,在使用完对象之后,由开发人员及时释放内存。能够灵活的控制内存何时释放

 7.介绍一下协议与类别
协议(delegate):声明一系列的方法,可由任何类实施,及时遵循该协议的类没有共同的超类。协议方法定义了独立于任何特定类的行为。简单地说,协议就是定义了一个接口,其他类负责实现这些接口。
类别(category):可以为已经存在的类增加方法,热不需要增加一个子类。我们可以在不知道某个类内部实现的情况下,为该类增加方法。
8. #import 和 #include的区别 @class?
@class一般用于头文件中用于该类的声明,在m文件中还是需要使用#import。而#import比起#include的好处是不会引起交叉编译

9.在一个对象的方法里面:self.name = “object”; 和 name = “object” 有什么不同吗?
self.name =”object”:会调用对象的setName()方法;
name = “object”:会直接把object赋值给当前对象的name属性。

10.请简述self.name = nil 的机制,以及与[name release]的区别?
前者调用属性自动生成的setter方法,内部实现release,同时指针指向nil; 后者直接向对象发送release消息,使对象引用计数减1

11.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个

define MIN(A,B) ((A) <= (B) ? (A) : (B))

12下面的代码有什么问题??
死循环(self.name = [name retain]再次调用setter方法)setter方法内部不能使用self.为实例变量赋值
- (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        self.name = [name retain];
    }
}
 13.MVC是什么??
MVC是一个框架级的设计思想。
M:Model 模型 主要用于建立数据模型(即数据的结构)
V:View视图  主要功能是展示数据
C: Controller 控制器 主要是控制M和V的通信(相当于桥梁)
MVC可以帮助实现程序最大程度的可重用性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值