iOS-某公司笔试题

1、iOS中一个类变量的variable有多少种?它们之间有什么显著的差别?

答:全局变量、静态全局变量、静态局部变量、局部变量、属性、成员变量
按存储区域分:全局变量、静态全局变量、静态局部变量都是存放在内存的静态存储区域,局部变量则存放在内存的栈区
按作用域分:全局变量在这个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序只分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,函数返回后,该变量消失。
属性:一般用于和外界其他类进行交互的数据,系统会自动生成setter和getter方法
成员变量:通常用于函数内部,无需与外界进行接触的变量

2、Class method和Instance method有什么差别,请一一列举。并尝试在这个角度描述alloc和init的差异和使用方法。

答:
(1)类方法是以“+”开头,实例方法是以“-”开头
(2)类方法在程序开始时生成内存,所以类方法可以直接调用,而实例方法在程序运行时生成内存,实例方法要先通过alloc、init生成实例通过实例调用方法。
(3)类方法属于整个类而不属于某个对象
(4)类方法只能访问类成员变量不能访问实例变量,而实例方法可以访问类成员变量和实例变量
(5)类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问
(6)类方法只能访问类方法,而实例方法可以访问类方法和实例方法
(7)类方法不可以被覆盖,而实例方法可以被覆盖
将一个类alloc就是给这个类开辟出相应的内存空间,而init则是将这个类进行初始化,使其指向一个具体的对象。类方法从程序开始便生成了固定的内存,所以类方法可以直接调用,而实例方法则是在程序运行时生成的内存,实例方法要先通过alloc、init生成实例才能调用实例方法。

3、iOS中是否有垃圾回收机制,请描述手工内存管理的机制和方法。

答:iOS没有垃圾回收机制。
iOS中手动管理内存的机制是依赖对象引用计数来进行的。在OC中每个对象的内部都有一个与之对应的整数(retaincount),即引用计数。当一个对象在创建之后它的引用计数为1,当这个对象调用alloc、retain、new、copy方法之后引用计数自动在原来的基础上加1(OC中调用一个对象的方法就是给这个对象发送一个消息),当调用这个对象的release方法之后它的引用计数减1,如果一个对象的引用计数为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象。

4、简述oc 2.0中properties的作用和使用方法。

答:编译器会自动为你生成以下划线开头的实例变量,不需要再手动去写实例变量。而且也不需要在.m文件中写@synthesize 也会自动生成setter和getter方法。@synthesize的作用就是让编译器自动为你生成setter和getter方法。@synthesize还有一个作用就是可以指定与属性对应的实例变量,例如@synthesize myButton = XXX;那么self.myButton其实是操作实例变量xxx而不是_myButton了。
在.h中声明属性则默认是public,外部可以访问,在.m中声明相当于是@private;

5、简要解释id变量数据类型?

答:id声明的对象具有运行时的特性,因此id类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。其中id是一个指针,它是一个指向任何一个继承了Object类的对象。

6、oc是否支持多重继承?为什么?

答:OC中不支持多继承。多继承意味着一个子类能同时继承于多个父类,从而拥有多个父类的特性,但是多继承拥有很多缺点。如:(1)若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判断使用哪个父类的成员变量;(2)若一个子类继承于多个父类,且父类拥有同名的方法,而此时子类又未重写该方法,则在调用的时候就无法判断到底该调用哪个父类的方法。因此,在OC中不支持多继承,而用类别或协议来实现类之间的通信。

7、请简要解释oc中protocols的作用和使用方法。

OC中协议的作用通常用来在两个相关联的类中进行回传值时。

使用方法:

(1)首先在含有信息的类的.h中进行协议的声明,并声明一个id类型的代理遵守此协议

(2)其次在.m中用.h中id声明的的代理调用协议方法。

(3)在遵守协议的类的.m中将代理指向声明的类并进行协议方法的实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值