zoukankan      html  css  js  c++  java
  • ios面试总结-

    一 C语言方法的知识

      1: const  static  voilite 修辞变量各代表什么意思?

         const  修辞的变量为常量,常量是不容许修改。

         static  修辞的变量为静态变量,在内存中只被创建一次(如UItableView 中创建Cell的代理方法 用会用到静态变量标识Cell)

         Volatile定义变量为一个共享变量 

      2: static 的作用

        在类中 static  修饰的变量属于整个类的所有,对类的所有对象共享一份

        在类中static   修辞的方法属于这个类所有,该方法不能通过this来访问  只能通过类来访问该方法。

           在函数体 static修辞的变量 在内存中只被分配一次,多次调用函数体都是调用内存中的同一份。

    二   OC中内存方面。

       1 :OC 中内存管理方式

       当对象调用  alloc /retain /copy 的方法时,对象的引用计数器会加1 ,当对象不在使用的时候要调用release/Autorelease将其释放。

       2 :release和Autorelease的区别。

        当对象调用release的时候 对象的引用计数器减1.

        当对象调用Autorelease 对象引用计数器会被系统放在最新的一个自动释放池中,当程序执行作用域外 自动释放池就会被释放此时对象的引用计数会被减1.

      3:readwrite  readonly   assign  retain  copy  atomic  nonatomic的属性作用

       readwrite  readonly是设置属性访问级别。

       assgin  是直接赋值 系统默认的

       retain   该类想一直持有属性,对象属性计数器会加1

       copy   对象的拷贝 (当属性是NSString 是对象拷贝时浅拷贝 ,当对象时NSMutableString  对象时深拷贝)

       atomic nonatomic 线程访问  nonatomic是非原子访问,不加同步。

        4: 深拷贝和浅拷贝的区别

        浅拷贝是指针拷贝对象引用计数加1(如NSString对象调用copy是浅拷贝)

         深拷贝在原有对象基础上拷贝出一个新的对象(如NSMutableString对象调用copy是深拷贝)

      

        5: OC中如何管理内存

        有2种  第一 手动管理方式   第二 ARC 自动管理方式。

    三  OC中面向对象

       1: 什么是多态

        多态   子类的指针可以指向父类,调用相同的方法 实现不同的功能。

       2:代理的作用

       代理 改变或控制传递链。容许一个类在特定的情况下通知其他类来完成某项功能(如应用程序启动完成 会调用applicationDelegate类的方法来监听应用程序的生命周期)

       3:类别的作用(category)

        类别主要作用可以动态为类扩展新的功能和方法。(如在项目中很多地方都使用文件缓存即 在NSObject中添加一个保存缓存的方法,方便公用) 

        4: 类别和扩展的区别。

      相同点:

         类别和扩展都可以动态为类添加新的方法,

      不同点:

        类扩展可以添加属性,并且类扩展声明的方法都必须实现。

        类别 不能添加属性,类别中声明的可以不实现。

        

        5: Object-c 支持多继承吗? 有私有方法和私有变量吗?

         

          Object -c 不支持多继承,可以采用多个协议来实现多继承。

                没有私有方法只有类方法和实例方法。

        6: 扩展一个类是用继承好还是类别好?

               一般使用类别好,不用定义子类 还能直接把类的定义放在不同的文件里面(如要扩展NSString 的方法最好使用类别)

       7: 什么时候用delegate? 什么时候用Notification?

           delegate 针对对象一对1

           Notification对一对多。

       8:@Prviate  @protected  @public 声明中代表什么含义?

          @prviate  私有的  只有本类中可以访问

          @protected 受保护,只有本类和子类中可以访问

          @public  公用   任何类都可以访问。

      

    四  OC中的特性

         1:  id声明的对象有什么特性?

          id 声明的对象具有运行时的特性。声明对象可以指向OC中任何类型的对象。

         2:对于NSString * str =[[NSDate alloc ] init ]   对象str编译时和运行时的类型区别?

        str 编译时 是NSString   运行时 是NSDate

     

         3: KVC和KVO的区别

        KVC 键值编码是一种间接访问对象属性的的机制,通过字符串来间接访问属性。

       KVO 键值观察模型  当对象属性发生变化 会自动响应对象的指定方法

        4: #import和#include的区别,@class代表什么?

         @class 用来声明一个类 用来解决同文件相互包含  

          #import 是OC引入头文件的关键字,

        #include 是C语言引入头文件的关键字。

        #include引入头文件可能引起重复编译 而#import则不会引起重复编译。 

       

         5:线程和进程的区别?

        相同点:线程和进程都是操作系统运行中基本单元,系统利用该基本单元实现系统对应用的并发。

        不同点:

       进程有独立的地址空间 一个进程崩溃 在保护模式下不会影响其他进程。

       线程是进程中执行片段路径,线程没有独立的地址空间 但是有自己的堆栈和局部变量,一个线程崩溃等于整个进程死掉。即 多进程比多线程健壮性更好,但是系统在切换进程中会浪费多资源。

       6:堆和栈的区别?

         管理方式:

      栈上的变量 是由编译器自动管理 不需要手动管理。

         堆上的变量  是由程序员手动开辟和释放。

        7: id  nil  Nil的区别?

         id 是声明对象具有运行时的特性。可以指向OC对象中的任何类型。

        nil  指的对象的指针为空。

        Nil  指向空的类。

      

         8:@import<>,@import “” 和@class的区别

           @class 用来声明一个类 用来解决同文件相互包含

           @import<> 用来导入系统头文件

           @import “”  用来导入自定义头文件

        

        9: 方法和选择器有何不同?

            selector(方法) 表示方法名称

           method 是一个组合体 表示方法名称和实现。

     

        10 :你对@property 和@interface 的理解

          @interface 用来声明一个类。

         @property 用来声明2个方法  编译器会自动生成 get  set方法。

       11: OC 语言的优缺点

         优点:

           1:category

           2: C  C++  OC 混编。

           3: 动态识别

         缺点:

          1:不支持运算符重载

          2:不支持多继承。

    五: IOS 生命周期

         1:ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?

            loadView  是当调用 self.view=nil 会调用loadView方法

          viewDidLoad 是当View加载完成后调用该方法。

               viewDidUnload是view的视图控制器在window上销毁后调用。

         2: 应用程序被打开有几种方法

           1: 正常打开

           2:本地通知打开程序

           3:被另一程序调用打开(程序可以开启微信)

       

    六  IOS中UI部分

        1:Frame 和Bounds的区别?

           Frame 是子View的坐标相对于View的位置。

          Bounds 是自己的坐标系(其中X =0  Y=0)

        2: UIView和CALayer的区别?

       UIView是ios基本界面基础 所有界面元素都基础UIView上,在UIView内部上绘图部分是由图层来完成。

       3: 事件处理过程

         当用户触摸在一个View的点时   看点是否存在subview 和subview的subview上。

         如果同时都存在  事件处理有当前View处理。

         如果不是同时存在subview的subview上 触摸点由由最近的一个Subview来处理。

     4; 事件处理终止条件

        alphe <0.01 

       userInteractionEnabled=NO

       Hidden ==yes

    5: UIView的生命周期是什么样的?顺序是怎么样的。

      创建View和呈现View

         init  -- loadView --ViewdIdLoad --ViewwillAppear-- viewDidAppear

          View的消失和销毁

                viewWillDisappear--viewDidDisappear--ViewUnload--dealloc

     6:UIViewController在什么时候回加载View.

        

       当调用self.view =nil的时候 会调用loadView去重新加载View.

    7: UITableView中代理方法执行的流程是什么样的?

         第一步: 得到section   -- numberofSectionTableView

        第二步: 得到Row  -- numberofRowTableView

        第三步: 创建Cell -——方法忘记了。

    8: UITaleView中怎样实现重复使用Cell.

        1: UITableView对象 先冲缓存中取出Cell 

        2: 取出Cell 如果为nil 就重现创建

        3: 取出的Cell如果不为nil  就是重新赋值。

    9:如何设计一个可变高度的Cell?

       1:得到内容 通过内容算出内容所占的高度

       2:在UITableView中设置Cell代理方法中 把算出来的高度赋值即可。

    10: 谈谈UITableView中使用MVC模式。

       MVC模式 

       M 代表数据模型 主要提供数据源。

       V 代表视图模型  主要用来展示界面。

       C 代表控制器  主要是数据模型和视图模型的桥梁。

    七 :IOS的数据存储

      1:ios存储数据源有哪些方式。

        文件存储(文件缓存),

        plist ,

        NSUserDefault(用来存储密码)

        sqlit(商品信息)

     3: 数据库优化经验

         1:批量操作要在一个数据库连接中完成

         2: 多个操作要开启事物

         3:查询要开启分页查询。

    八:IOS中网络和线程

       1:网络请求的安全性处理。

       答:一般请求中都用的是Post的请求,Post请求的参数都经过 Base64编码。

       2:ios中常用线程

         队列(operationQueue)  创建一个任务 把任务加入到任务队里就开启了一个异步线程。

         GCD 操作

       3:什么是TCP三次握手

       第一次握手: 客户端向服务器发送请求 等待服务确认

        第二次握手: 服务处理客户端的请求。

       第三次握手:  服务器把处理好的请求响应给客户端。

       4:Socket建立网络连接步骤

          1:客户端请求: 客户端通过套接字向指定IP 端口 协议发出请求。

          2:服务端监听:服务端套接字实时监控网络请求 等待客户端的请求。

          3:连接确认:当服务端监听到客户端发送过来套接字 并且处理响应给客户端。

    九 :IOS其他操作

       1:ios消息推送机制

        答: ①:应用程序 把 要发送的消息 和 iphone的标识打包   发送给 苹果推送服务器

          ②:苹果服务器  逐一查找打包好的iphone标识 并且发送消息

               ③:iphone把发送消息传递给相应的程序 弹出push的通知

     

     十: ios 开发中遇到的问题

          1:连续多次点击导航按钮,会重复创建多个控制器?

             解决方案: 在点击按钮中加一个bool值判断,如果一次点击 直接创建VC,第二点击就不执行创建VC

        

  • 相关阅读:
    天梯赛5-12 愿天下有情人都是失散多年的兄妹 【dfs】
    poj2718 Smallest Difference【贪心】
    HDU problem 5635 LCP Array【思维】
    codeforces 782C Andryusha and Colored Balloons【构造】
    HDU 4278 Faulty Odometer【进制转换】
    codeforces B. The Meeting Place Cannot Be Changed【二分】
    POJ 3264 Balanced Lineup 【线段树】
    HDU 1850
    CodeForces-714C
    HDU Problem 1247 Hat's Words 【字典树】
  • 原文地址:https://www.cnblogs.com/gcb999/p/4349938.html
Copyright © 2011-2022 走看看