当前位置: 首页 > news >正文

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

    

转载于:https://www.cnblogs.com/gcb999/p/4349938.html

相关文章:

  • 一步一步给你的 Android app 加入聊天功能
  • 敏捷实施:看板能否实现规模化?
  • Java读写Excel之POI超入门
  • 13.allegro 颜色设置[原创]
  • vistual studio 2012 安装失败,提示Microsoft Vistual Studio 2012 Devenv找不到元素,等错误信息...
  • 在浏览器中输入Google.com并且按下回车之后发生了什么?(转)
  • MySQL管理之 MyISAM和InnoDB存储引擎简单对比
  • 转:cocos2d-x里的TiledMap出现黑线和抖动的解决方案(不影响其他类使用)
  • 结对开发——求环形二维数组最大子矩阵和的问题
  • linux 2.6 互斥锁的实现-源码分析
  • 构建基于Nginx的web服务器
  • iOS之网络数据下载和Json数据解析
  • SQL Server技术内幕笔记合集
  • windbg vmware配置
  • [数分提高]2014-2015-2第5教学周第2次课讲义 3.2 微分中值定理
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 2017-08-04 前端日报
  • Android优雅地处理按钮重复点击
  • angular2开源库收集
  • CSS实用技巧
  • Git学习与使用心得(1)—— 初始化
  • oldjun 检测网站的经验
  • python学习笔记 - ThreadLocal
  • SQLServer之创建显式事务
  • vue 配置sass、scss全局变量
  • vue2.0项目引入element-ui
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 仿天猫超市收藏抛物线动画工具库
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何解决微信端直接跳WAP端
  • 收藏好这篇,别再只说“数据劫持”了
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​​​​​​​​​​​​​Γ函数
  • (1)(1.13) SiK无线电高级配置(六)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (算法)Game
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ../depcomp: line 571: exec: g++: not found
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .bat批处理出现中文乱码的情况
  • .NET 5种线程安全集合
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 回调、接口回调、 委托
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET命名规范和开发约定
  • @RunWith注解作用