ios面试题

      

1、#import与#include的区别,@class的含义

    @class是前向引用,只是告诉编译器有这么一个类,具体的定义并不知道。一般用于在头文件中需要声明该类的某个实例变量时候用到,在.m文件中还是需要使用#import。

    #impotr比起#include的好处就是不会引起交叉编译。

2、对MVC模式的理解。

    MVC是一种设计模式,考虑了三种对象:模型对象,视图对象,控制器对象。模型对象负责应用程序的数据和定义操作数据的逻辑;视图对象知道如何显示应用程序的模型数据;控制器对象是M与V之间的协调者,实现了功能模块和显示模块的分离,提高了应用程序的可维护性、可扩展性、可移植性和组件的可复用性。

3、目标-动作机制

    目标是动作消息的接收者,一个控件,或者更为常见的是他的单元,以插座变量的形式保留其动作消息的目标。

    动作是控件发送给目标的消息,从目标的角度看。他是目标为了相应动作二实现的方法,程序需要某些机制来实现事件和指令的翻译,这个机制就是目标-动作机制。

4、objective-c内存管理

    如果你alloc一个对象,就拥有这个对象,需要手动释放,这个规则对于Nsobject的new方法同样适用。

     retain一个对象,就部分拥有这个对象,需要在不再使用时释放该队对象。

     copy一个对象,也拥有拷贝得到的对象,需要负责该对象的释放。

    如果从其他对象那里接受到一个对象,不拥有该对象,也不应该释放他(该规则有少数的例外)。

5、自动释放池是什么,如何工作

     当向一个对象发送一个autorelease消息时,Cocoa就会将该对象的引用放到最新的自动释放池。自动释放池定义的作用域内的其他对象可以向它发送消息,当程序执行到作用域结束的位置时,自动释放池被释放,池中的所有对象也就被释放。

    objective-c是通过一种“referring counting(引用计数)”的方式来管理内存的,对象在分配内存(alloc)的时候引用计数为1,以后每当碰到copy、retain的时候引用技术都加1,碰到release和autorelease时候,都减1,当对象的引用计数为0时,会被系统销毁。

    NSAutoreleasePool就是用来做引用计数的管理工作的。

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

5、objctive-c的优缺点

    优点:(1)Cateogies (2)Posing (3)动态识别 (4)指标计算 (5)弹性讯息传递 (6)不是一个过渡复杂的c衍生语言 (7)可以与c++混合编程

    缺点:(1)不支援命名空间 (2)不支持运算符重载 (3)不支持多重继承 (4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到(如内联函数),性能低劣。

6、oc有多重继承吗,不是的话,有什么替代方法

     在oc中,用protocol委托代理来实现多继承的。

7、写一个委托的interface

    @protocol  MyDelegate;

    @interface  MyDelegate:Nsobject

   {

         id<MyDelegate> delegate;

      }

     @protocol  MyDelegate

      - (void)didJobs:(NSArray *)args;

      @end

8、oc有私有方法吗,私有变量呢

    oc类里面的方法只有两种:静态方法和实例方法,声明一个私有方法:

     @interface Controller:Nsobject

      {

           NSString *something;

        }

       + (void)thisIsAStaticMethod;

       - (void)thisIsAnIstanceMethod;

      @end

       @interface Controller(private)

        - (void)thiaIsAPrivateMethod;

       @end

      @private可以用来修饰私有变量。

       在oc中,所有实例变量默认都是私有的,所有实例方法默认都是公有的。

9、类工厂方法是什么

      类工厂方法的实现是为了向客户提供方便,它将分配和初始化合在一个步骤中,返回被创建的对象,并进行自动释放处理。这些方法的形式是+(type)className......工厂方法不但可以将分配和初始化合在一起,还可以为初始化过程提供对象的分配信息。

      类工厂的另一个目的是使类提供单件实例,虽然init......方法可以确认一个类在程序运行过程中只存在一个实例,但它需要首先分配一个“生的”实例,然后还需要释放该实例。工厂方法则可以避免为可能没有用的对象盲目分配内存。

10、单件实例是什么

       Foundation 和Application Kit框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例,如NSFileManager 和NSWorkspace类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候,如果该实例还不存在,首先进行实例的分配和初始化。单件对象充当控制中心的角色,负责指引和协调类的各种服务,如果类在概念上只有一个实例,就应该产生一个单件实例,而不是多个实例,如果将来某一天可能有多个实例,可以使用单件实例机制,而不是工厂方法或函数。

11、软件测试都有那些种类

    黑盒:针对系统功能的测试。 白盒测试:测试函数功能,各函数的接口。

12、确定模块的功能和接口是在函数的软件设计的哪个阶段

    概要设计阶段。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值