iOS理论:基础概念篇

浅复制与深复制(深浅拷贝)

@浅复制 - 只复制指向对象的指针,而不复制引用对象本身。
         复制的两份指向的是同一个内存资源,当一方改变时另一方也会做出同样的改变。

@深复制 - 复制引用对象本身,两个对象是独立存在的。

`

类别与继承

@类别 - 在不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
        如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。

    类别主要有3个作用:
    1). 将类的实现分散到多个不同文件或多个不同框架中。
    2). 创建对私有方法的前向引用。
    3). 向对象添加非正式协议。

@继承 - 子类继承父类,可以增加、修改或者删除方法,并且可以增加属性。

`

MVC与MVVM

@MVC - 即模型-视图-控制器开发模式,模型层存储数据,视图层用来展示界面,
       控制器层通过处理数据加载、用户交互、业务逻辑,来控制模型层和视图层。

@MVVM - 即Model-View-ViewModel的开发模式,它是在MVC的基础上,
        将控制器层的数据加载部分进行分离,转移到ViewModel中,减轻控制器层的臃肿程度。

`

Block

Block 类似于C语言的函数指针,可以作为参数进行传递,用于回调。但Block的实现可用定义在方法中,函数不可以。

`

多线程

@NSThread - 


@NSOperation - 


@GCD - 

`

内存管理

`

assign/copy/retain/strong/weak/nonatomic/atomic/

@assign - 普通赋值,一般用于C语言的基本数据类型、代理,以此来防止循环引用。

@strong - 强引用,在ARC中使用strong告诉编译器帮助我们自动插入retain。

@weak - 普通赋值,相当于手动管理内存的assign。

@nonatomic - 非原子性访问,不加同步,多线程并发访问会提高性能。

`

KVC和KVO

@KVC - 即指NSKeyValueCoding,一个非正式的Protocol,提供一种机制直接通过字符串的名字来间接访问对象的属性。
       而不是通过调用Setter、Getter方法访问。KVO就是基于KVC实现的关键技术之一。

@KVO - 即Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。
       简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

`

ViewController的生命周期

`

iOS 创建一个最简单的单例

+ (instancetype)sharedInstance {
    static <#className#> * instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

`

TCP和UDP

TCP全称为传输控制协议,提供面向连接、可靠的、点到点的通信。
UDP全称为用户数据报协议,提供非连接、不可靠、点到多点的通信。

`

Socket和Http连接

Http连接:即所谓的短连接,客户端向服务端发送一次请求,服务端响应后连接会立即断掉。
Socket连接:即所谓的长连接,理论上客户端与服务端一旦建立起连接将不会主动断掉。


1、什么是Socket?

Socket又称之为“套接字”,是系统提供的用于网络通信的方法。它的实质并不是一种协议,没有规定计算机应当怎么样传递消息,
只是给程序员提供了一个发送消息的接口,程序员使用这个接口提供的方法,发送与接收消息。

Socket描述了一个IP、端口对。它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,
再由服务器端来处理发送的这些消息。所以Socket一定包含了通信的双发,即客户端(Client)与服务端(server)。

2、Socket的通信过程?

每一个应用或者说服务,都有一个端口。比如DNS的53端口,http的80端口。我们能由DNS请求到查询信息,
是因为DNS服务器时时刻刻都在监听53端口,当收到我们的查询请求以后,就能够返回我们想要的IP信息。
所以,从程序设计上来讲,应该包含以下步骤:

1)服务端利用Socket监听端口;
2)客户端发起连接;
3)服务端返回信息,建立连接,开始通信;
4)客户端,服务端断开连接。

即时通讯最大的特点就是实时性,基本感觉不到延时或是掉线,所以必须对socket的连接进行监视与检测,在断线时进行重新连接,
如果用户退出登录,要将socket手动关闭,否则对服务器会造成一定的负荷。

`

TCP三次握手

`

Runtime 

RunTime简称运行时。是一套比较底层的纯C语言的API, Objective-C是运行在Runtime上的。

对于C语言,函数的调用在编译的时候会决定调用哪个函数。编译完成之后直接顺序执行,无任何二义性。

OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数
(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。
只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

`

Runloop

Runloop是事件接收和分发机制的一个实现。它提供了一种异步执行代码的机制,不能并行执行任务。
在主队列中,Main RunLoop直接配合任务的执行,负责处理UI事件、定时器以及其他内核相关事件。

RunLoop可以保证程序执行的线程不会被系统终止。所以当需要和该线程进行交互的时候才会使用Runloop,
一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。

每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。

`

Git

`

CoreData

`

static

`

@常见算法 - 
    递归法、
    穷举法、
    贪心算法、
    分治法、
    动态规划法、
    分支界限法、
    回溯法

@常见数据结构 - 
    数组、
    堆、
    栈、
    队列、
    链表、
    树(满二叉树、完全二叉树)、
    图、
    Hash表

@常见设计模式 - 
    代理模式(为其他对象提供一个代理以控制对这个对象的访问)、
    观察者模式(定义对象间的一种一对多的依赖关系,
              以便当一个对象的状态发生改变时,
              所有依赖于它的对象都得到通知并自动刷新)、
    单例模式(保证一个类有且仅有一个实例,并且自行实例化向整个系统提供)、
    工厂模式(定义一个用于创建对象的接口,让子类决定将哪一个类实例化)、
    外观模式、
    适配器模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值