• ios面试笔记


    1,ios中代理的作用?

      答案:就是委托他人帮自己去做什么事。也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法。
      其次,总结了一下自己用到的委托的作用有两个,一个是传值,一个是传事件。
         1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)
         2.所谓传事件就是a类发生了什么事,把这件事告诉关注自己的人,也就是委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。(这个经常见,例如在异步请求      中,界面事件触发数据层改变等等)
        3.利用委托赋值,这种方法感觉是为了不暴露自己的属性就可以给自己复值,而且这样更方便了类的管理,只有在你想要让别人给你赋值的时候才调用,这样的赋值更可控一          些。(例如tableView中的委托(dateSource)中常见)。

    2,ios 一个视图推出另一个视图用present ,怎么返回来?

    答案:如果是push的话,就pop前一个视图,如果时present的话就,dismiss前一个视图

    3,ios nil、NULL和NSNull 的区别?

      答案:nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。

    4,ios通知机制原理,如果让你写,你能写出来吗?

     答案:主要是利用观察者模式的原理

    5,uitableview 的原理(uitableviewcell复用机制)?

    复用队列的元素增加:只有在cell被滑动出界面的时候,此cell才会被加入到复用队列中。每次在创建cell的时候,程序会首先通过调用dequeueReusableCellWithIdentifier:cellType方法,到复用队列中去寻找标示符为“cellType”cell,如果找不到,返回nil,然后程序去通过调用[[[UITableViewCell alloc] initWithStyle:style reuseIdentifier:cellType] autorelease]来创建标示符为“cellType”cell

    6,ios如何操作或者数据存储到数据库(不是指sqlite)?

    fmdb操作sqlite3

    7,ios7自带的http请求的类有了解过吗?

    8,什么时候用delegate,什么时候用Notification?

    delegate针对one-to-one关系,用于sender接受到reciever的某个功能反馈值。

    notification针对one-to-one/many/none,reciver,用于通知多个object某个事件。

    9,写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。
    #define MIN(A,B) ((A) <= (B) ? (A) : (B))  

     10,写一个委托的 interface

    @protocol MyDelegate;

     
    @interface MyClass: NSObject

    {

        id <MyDelegate> delegate;

    }

    // 委托方法

    @protocol MyDelegate

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

    @end

    11,obj-c有多重继承么?不是的话有什么替代方法?
    cocoa 中所有的类都是NSObject 的子类
    多继承在这里是用protocol 委托代理 来实现的 
    你不用去考虑繁琐的多继承 ,虚基类的概念.
    ood的多态特性  在 obj-c 中通过委托来实现.

    12,#import跟#include的区别,@class呢?

     @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import

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

     13,

    obj-c有私有方法么?私有变量呢

     objective-c - 类里面的方法只有两种, 静态方法和实例方法. 这似乎就不是完整的面向对象了,按照OO的原则就是一个对象只暴露有用的东西. 如果没有了私有方法的话, 对于一些小范围的代码重用就不那么顺手了. 在类里面声名一个私有方法

    @interface Controller : NSObject {

       NSString *something;

    }

    + (void)thisIsAStaticMethod;

    - (void)thisIsAnInstanceMethod;

    @end

    @interface Controller (private)

    -(void)thisIsAPrivateMethod;

    @end

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

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

    14,

    堆和栈的区别


    管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。

    1.申请大小:
    栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示 overflow。因此,能从栈获得的空间较小。


    堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

    2.碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出

    3.分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由 alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。

    4.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的。

    15,用变量a给出下面的定义 

    a) 一个整型数(An integer)  
    b)一个指向整型数的指针( A pointer to an integer)  
    c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r  
    d)一个有10个整型数的数组( An array of 10 integers)  
    e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)  
    f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)  
    g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument
     and returns an integer)  
    h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions t
    hat take an integer argument and return an integer )  
     
    答案是:  
    a) int a; // An integer  
    b) int *a; // A pointer to an integer  
    c) int **a; // A pointer to a pointer to an integer  
    d) int a[10]; // An array of 10 integers  
    e) int *a[10]; // An array of 10 pointers to integers  
    f) int (*a)[10]; // A pointer to an array of 10 integers  
    g) int (*a)(int); // A pointer to a function a that  takes an integer argument and returns an integer  
    h) int (*a[10])(int); // An array of 10 pointers to functions  that take an integer argument and return an integer

     16,readwrite,readonly,assign,retain,copy,nonatomic 属性的作用


    @property是一个属性访问声明,扩号内支持以下几个属性:
    1,getter=getterName,setter=setterName,设置setter与 getter的方法名
    2,readwrite,readonly,设置可供访问级别
    2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
    3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
    4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再 Copy出新的对象,retainCount为1。

       这是为了减少对上下文的依赖而引入的机制。
    5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法

       都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)。

    17,http和scoket通信的区别。

    http是客户端用http协议进行请求,发送请求时候需要封装http请求头,并绑定请求的数据,服务器一般有web服务器配合(当然也非绝对)。 http请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开连接,以节省资源。服务器不能主动给客户端响应(除非采取http长连接技术)。iphone主要使用类是NSUrlConnection。

    scoket是客户端跟服务器直接使用socket“套接字”进行连接,并没有规定连接后断开,所以客户端和服务器可以保持连接通道,双方都可以主动发送数据。一般在游戏开发或股票开发这种要求即时性很强并且保持发送数据量比较大的场合使用。主要使用类是CFSocketRef。

    18,

    什么是沙箱模型?哪些操作是属于私有api范畴?


    某个iphone工程进行文件操作有此工程对应的指定的位置,不能逾越。

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.

    documents,tmp,app,Library。

    (NSHomeDirectory()),

    手动保存的文件在documents文件里

    Nsuserdefaults保存的文件在tmp文件夹里

    19,kvo/kvc和通知中心的区别

     

    20,即时通讯xmpp协议

    21,

  • 相关阅读:
    EF+MVC+Bootstrap 项目实践 Day7
    JS---数组
    OS---华硕笔记本从U盘启动安装系统
    PHP--分页类
    PHP--数据库操作类
    OS---net start mysql 发生系统错误5
    MYSQL---远程连接mysql数据库提示:ERROR 1130的解决办法
    CSS-小谈LV,HA!
    MYSQL---设置存储引擎
    MYSQL---存储引擎
  • 原文地址:https://www.cnblogs.com/wangzh1225/p/3557972.html
Copyright © 2020-2023  润新知