zoukankan      html  css  js  c++  java
  • 【面试题】iOS开发知识体系

    iOS开发知识体系 

    每个人心中都有一套自己的知识体系,对于iOS开发,我有自己的一套粗略的认识,望各位博友指正. 

    一,块.

    1.iOS系统的SDK

    iOS的SDK学习可能是初学者需要耗时最多的一个知识。因为其中有大量的库需要我们来学习掌握。其中最基本的几个为:

    Foundation.framework

    在你学习使用iOS的过程中,你会碰到大量的"NS"前缀的类库,这些类库基本上属于Foundation.framework,它是iOS开发的核心库,其中包括:常用数据结构(NSArray/NSDictionary/NSString 等)、网络(NSURL../NSHTTP..)、多线程(NSThread/NSNSOperation)等。

    UIKit.framework

    库使用"UI"为前缀的类库被包含在这个framework中,这些大部分是系统的UI层面的控件。如UIViewController、UIView、UIButton、UILabel等。使用这些控件才能构建出一个完整的APP。

    QuartzCore.framework

    iOS中绚丽而平滑的动画效果,是吸引人的一大利器,如果你想做出这样的效果,那你就得了解这个库了。iOS的核心动画的API都被包含在这个framework中,学会使用它才能让你的APP更加亮眼。

    AVFoundation.framework

    AVkit.framework

    CFNetwork.framework

    Mapkit.framework

    .. 

    2.UI(NSArray/NSDictionary/NSString)

     (UIViewController/UIButton/UIView)

    3.网络(NSURl/NSHTTP...)

    网络这一块不仅仅指学会使用SDK中的网络API调用,而是指要去理解网络编程。
    你需要知道HTTP协议消息结构GET/POST方法常见的状态码的意思Request/Response
    你还需要知道与服务器通信使用的数据格式如:json、xml。

    1、HTTP(HTTPS)、TCP、UDP协议的区别 
    2、同异步的GET和POST请求 
    3、AFNetworking封装的网络请求

    4.数据库

    数据库你需要知道基本的SQL语句 select/update/insert/delete的操作;
    需要知道怎么连接表查询:外连接、内连接、自连接等;
    需要知道实体数据一对一、一对多、多对多关系如何设计数据库表。

    5.GitHub

    iOS有着很浓厚的开源精神,在GitHub上有许多优秀的开源项目,在真正的开发过程中,某些著名的开源库大家也都广泛的使用着。如:

    AFNetworking

    SDWebImage

    MJRefresh

    6.多线程(NSThread/NSOperotion...)

    1、NSThread:优点是NSThread 比其他两个轻量级。缺点是需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销。 
    2、NSOperaion:优点是不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。Cocoa operation 相关的类是 NSOperation ,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。 
    3、GCD:Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。现在的iOS系统都升级到7了,所以不用担心该技术不能使用。

    7.第三方库

    AFNetworking

    SDWebImage

    MJRefresh

    8.第三方插件

    1、代码注释生成器:VVDocumenter 
    2、CocoaPods插件,省去那些命令行了:CocoaPods for Xcode 
    3、imageName提示并且自动补全:KSImageNamed-Xcode 
    4、 

    9. 上线流程

    1、准备好证书和素材 
    2、iOS上架的一般流程 

    10.oc

    1.运行时特性

    2.protocol

    3.cetegory分类

    4.estension扩展

    类别Category和扩展Extension的区别:Category可以增加类的额外方法,一般不能增加类的属性(在runtime下可以),而Extension可以增加额外方法和属性,但其中的方法一定要在@implementation内实现,否则编译报错。

    5.引用计数器

    6.block

    11.系统控件

    1.自定义控件

    2.换肤

    3.多语言(国际化)

    4.手势

    5.Info.plist

    6.pch文件

    6.XML

    7.Stroyboard

    12.知识点

    1.分享 

    2.聊天(IM,即时通讯,网易云信/融云/环信..)

    3.附近(LBS)

    4.支付

    5.蓝牙

    6.直播

    7.音频视频

    8.地图

    9.推送 

    1、点击推送开发的一般流程 
    2、接入极光、友盟、信鸽、百度等第三方推送服务

    13.设计模式

    1.MVC/MVP/MVVM

    MVC:即Model - View - Controller,因为大量的逻辑在controller里,显得臃肿。 
    MVVM:MVC的加强版,即Model - View - View Model,Model是数据对象,View只做视 图显示,Controller是连接器,而View Model则是处理处理数据和视图的逻辑,MVVM的好处是使得Controller很轻量,不臃肿。 

    2.工厂模式 

    3.单例模式

    4.观察者模式(KVO/KVC)

    5.

    1、创建型:单例设计模式、抽象工厂设计模式 
    2、结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式 
    3、行为型:责任链设计模式、观察者设计模式,备忘录设计模式、命令设计模式 

    14.三大方式

    1.代理(Delegate)

    2.block

    3.通知

    15.其他语言

    1.c(基础也是进阶)

    2.swift(未来趋势)

    2.HTML5

    3.js

    4.java

    16.持久化

    一,本地数据缓存 
    1、写入plist文件; 
    2、使用系统类NSUserdefault; 
    3、归档; 
    4、使用系统数据库coreData; 
    5、使用FMDB数据库。

    17.工具

    一,使用svn、Git或者第三方项目管理工具 
    1、svn工具:Cornerstone.app和Versions.app,也可以使用Mac自带的,看看教程吧 
    2、git工具:SourceTree

    18.面试相关

    1)、SDWebimage的实现原理 

    答案:1、先把默认图片显示,然后SDImageCache先从内存中查找,有就显示,没有就去硬盘上查找,查到就添加到内存中,并且显示图片,如果硬盘中也读取不到图片,那就会 alloc 一个SDWebimageDownloader,异步加载图片,加载完成显示图片,并且保存到SDImageCache中,在内存和硬盘中同时保存。SDImageCache在初始化的时候会注册一些通知,在内存警告或退到后台的时候清理内存图片缓存,应用结束的时候清理过期图片。

    2)、单例的原理和实现以及用处 
    1、原理:在一个程序进程中只会实例化一次 
    2、实现(不太严格,因为还是可以alloc) 
    + (AccountManager *)sharedManager { 
    static AccountManager *sharedAccountManagerInstance = nil; 
    static dispatch_once_t predicate; 
    dispatch_once(&predicate, ^{ 
    sharedAccountManagerInstance = [[self alloc] init]; 
    }); 
    return sharedAccountManagerInstance; 

    3、用处:保证对象的唯一性,系统的UIApplication(应用程序实例)、NSNotificationCenter(消息中心)、NSFileManager(文件管理)、NSUserDefaults(应用程序设置)、NSURLCache(请求缓存)、NSHTTPCookieStorage(应用程序cookies池),单例可以优化本地缓存等

    3)、@synthesize和@dynamic分别有什么作用? 
    1、@property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var 
    2、@synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法 
    3、@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成

    4)、runTime和runLoop 
    1、runTime:运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。比如id类型、kvc已经selector方法的实现,在编译的时候并不会决定真正调用核心,只有在运行时才决定。原理是用isa指针记录执行。 
    2、runLoop:运行循环,是事件接受和分发机制的一个实现,是异步的,不能同步。目的是保证程序执行的线程不会被系统终止。当需要和线程进行交互的时候才会使用runLoop,线程和runLoop是一一对应的,以key-value形式保存,runLoop的创建不是线程创建的时候,而是第一次获取的时候,销毁则是线程结束的,当没有事件发生的时候,runLoop会休眠,需要则再次被唤醒。

    5)、进程和线程 
    1、进程:进程是指在系统中正在运行的一个应用程序,进程之间或不干扰,享有资源调配 
    2、线程:线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。

    19.文件夹操作File Manager

  • 相关阅读:
    PhoneGap在Mac环境下使用问题小结
    HTML5跨平台开发环境配置
    Delphi编写下载程序:UrlDownloadToFile的进度提示
    DELPHI中调用XSD去验证XML的合法性
    防止Form中嵌入WebBrowser出错导致程序崩溃
    Dynamics CRM:“the given key was not present in the dictionary”
    Dynamics CRM 2016 + Visual studio 2015 开发环境搭建
    IIS Recycling设定
    Dynamics CRM和数据挖掘
    客户才是关键
  • 原文地址:https://www.cnblogs.com/wangbinios/p/6381635.html
Copyright © 2011-2022 走看看