zoukankan      html  css  js  c++  java
  • 面试题(二)

    1,为什么很多内置类如UITableViewController的delegate属性都是asssign,而不是retain的

    防止循环引用:我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了

    2,在一个对象的方法里面:self.name = "object" 和 name = "object" 有什么不同吗?

    self.name会调用setName方法(set方法主要是对旧值),name的retainCount会加一, 后者直接赋值不会

    3,如何实现深拷贝

    浅拷贝:创建指针,不同的指针指向同一内存地址,一了百了, 下面的例子:str销毁的时候,str2也会变成野指针

        NSString *str = @"sad";
        NSString *str2 = str;
        NSString *str3 = [str retain];

    深拷贝:copy, mutablecopy, 新创建的对象retaincount 为1

     

    4,请简述一下  json,xml 的解析的原理

    http://blog.csdn.net/maxdong24/article/details/43815857 讲述的比较清晰

    json底层原理:JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号,:号等进行区分,{}号是一个字典的开始,[]号是一个数组的开始,:号是字典的键和值的分水岭,最终仍是将json数据转化为字典,字典中值可能是字典,数组,或字符串而已。

    XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析。DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历。使用DOM解析器的时候需要处理整个XML文档转化为一个包含其内容的树,并可以对树进行遍历。使用DOM解析器的是时候需要处理整个XML文档,所以对性能和内存的要求比较高。SAX在解析xml文档的时候可以出发一系列的事件爱你,当发现给定的tag的时候,他可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展功能得到了更好的体现。

     

    延伸:SAX和DOM的区别

    1、SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上应用程序甚至不必解析整个文档;他可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。另一方面,由于应用程序没有以任何方式存储数据,使用SAX还比它的替代者DOM快许多。另一方面,由于应用程序没有以任何方式存储数据,使用SAX来更改数据或在数据流中往后移是不可能的。

    2、DOM以及广义的基于树的处理有几个优点首先由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构做出更改。它还可以在任何时候在树中上下导航,而不像SAX那样一次性的处理。DOM使用起来简单的多。

    3、选择DOM还是SAX,这取决于以下几个因素:

    应用程序的目的;数据容量

    4、对速度的需要:SAX实现通常要比DOM实现更快

    SAX 特点

    只读
    
    从上向下
    
    速度快
    
    解析的时候相对比较繁琐,有5个代理方法,每个代理方法都要写一定代码
    
    适合大的 XML 文件解析

    mac 中可以使用 doc解析, iPhone只能使用sax解析

     

    5,什么是简便构造方法

    简便构造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt:

    Foundation下大部分类均有简便构造方法,我们可以通过简便构造方法,获得系统给我们创建好的对象,并且不需要手动释放(或者可以简单的理解为类方法返回对象)

    6,什么是谓词

    NSPredicate, 只要我们使用谓词(NSPredicate)都需要为谓词定义谓词表达式,而这个表达式必须是一个返回BOOL的值。谓词表达式由表达式、运算符和值构成。

    一般用来筛选

    7,http 和 socket 通信的区别, TCP 和 UDP 的区别,session 和 cookie 的区别

    8, MVC设计模式是什么?你还熟悉什么设计模式?
    MVC:Model, View, Controller,

    9,在项目什么时候使用 GCD,什么时候使用 NSOperation?

    项目中应用NSOperation的长处是NSOperation是对线程的高度抽象,在项目中应用它,会使项目标法式构造更好,子类化NSOperation的设计思绪,是具有面向工具的长处(复用、封装),使得实现是多线程支撑,而接口简朴,建议在庞大项目中应用。

    项目中应用GCD的长处是GCD自己很是简朴、易用,对于不庞大的多线程操作,会节约代码量,而Block参数的应用,会是代码更为易读,建议在简朴项目中应用。

    10,什么是block ,block实现原理

    block:可以理解为匿名的函数,就是预先准备好的一段代码,在需要的时候调用。

    Block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。

     

    11,什么是 NSManagedObject 模型?

    12,谈谈你对响应链的理解

    13,什么时候用 delegate ,什么时候用 Notification ,什么时候用KVO

    14,obj-c 有多重继承么?不是的话,有什么替代方法

    15,列举几种进程的同步机制,并比较其优缺点,什么情况下会造成死锁

    16,是否使用过 CoreAnimation 和 CoreGraphics 。UI 框架和 CA,CG 的关系是什么,分别用 CA 和 CG 做过些什么动画或者图像上的内容

    17,什么是键值,键路径是什么

    18,我们说的 oc 是动态运行时语言是什么意思

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/shidaying/p/4989222.html
Copyright © 2011-2022 走看看