What'sNewOnInternet 1st

What’sNewOnInternet

第一次到实验室听到这些词是一脸懵逼,我意识到如果要keep up with its development,掌握最新动态是必须的。所以开了这个tag,记录现在的热词。

  • G363
  • homebrew
  • cocoapods
  • stackflow
  • parallels

  • Swift语言中struct和class

  • 面向协议POP
  • MVC和MVVM
  • ReactiveCocoa
  • Github
  • clang swift llvm3.6
  • CMake语言
  • swift silver
  • ARC和MRC
  • UITableView的渲染顺序

G363

如果你不想科学上网,又想用最棒的引擎,用它准没错!

homebrew

Homebrew是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就是mac下的apt-get、yum神器

ruby -e “$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)”

具体使用

搜索软件:brew search //app

安装软件:brew install //app

卸载软件:brew remove //app

cocoapods

项目中会引用许多第三方库
所以cocoapods应运而生
详细教程:
http://blog.csdn.net/showhilllee/article/details/38398119


stackflow

程序员界的知乎,热心的提问和回答吧!

Parallels Desktop

答应我,装虚拟机先考虑这个好吗

Swift语言中struct和class

  1. struct没有继承的功能而class是可以继承的,面向对象语言的核心能力

  2. 体现在内存使用上,struct是通过值传递,而class是通过引用传递的

POP

  • Swift的核心是面向协议的编程。
  • 面向协议的编程的核心是抽象(abstraction)和简化(simplicity)

若太多子类继承了同一个父类,当父类有error时,后果难以置信。。

protocol ErrorPopoverRenderer {
func presentError()
}
extension ErrorPopoverRenderer where Self: UIViewController {
func presentError() {
//在这里加默认实现,并提供ErrorView的默认参数。
}
}
class KrakenViewController: UIViewController, ErrorPopoverRenderer {
func methodThatHasAnError() {
//…
//抛出error,原因是Kraken海妖今天吃人会感到不适。
presentError() //Woohoo! 没有参数了!我们现在有默认实现了!
}
}

VOP

值类型在任何时候只有一个享有者,从而降低复杂度。防止在任何时间点使用引用的话会带来的副作用。Class = 高复杂度,值类型 = 低复杂度。

struct ErrorOptions {
let message: String
let showArrow: Bool
let backgroundColor: UIColor
let size: CGSize
let canDismissByTap: Bool
init(message: String = “Error!”, shouldShowArrow: Bool = true, backgroundColor: Color = Color(), size: CGSize = CGSizeZero, canDismissByTappingAnywhere canDismiss: Bool = true) {
self.message = message
self.showArrow = shouldShowArrow
self.backgroundColor = backgroundColor
self.size = size
self.canDismissByTap = canDismiss
}

所以

protocol ErrorPopoverRenderer {
func presentError(errorOptions: ErrorOptions)
}
extension ErrorPopoverRenderer where Self: UIViewController {
func presentError(errorOptions = ErrorOptions()) {
//在这里加默认实现,并提供ErrorView的默认参数。
}
}

MVC和MVVM

简单回顾一下MVC
各部分之间的通信方式如下。
这里写图片描述
View 传送指令到 Controller
Controller 完成业务逻辑后,要求 Model 改变状态
Model 将新的数据发送到 View,用户得到反馈

科普贴:
http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致

前端工程师们与程序开发人员们实现了真正的分离,当然,为了减少重复代码量,前端人员有必要了解一个数据库结构。

前端进行MVVM的JS插件,knockoutjs

这里写图片描述

唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。AngularEmber 都采用这种模式。

附上MVP
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。
这里写图片描述
1. 各部分之间的通信,都是双向的。
2. View 与 Model 不发生联系,都通过 Presenter 传递。
3. View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

如果你想系统的学习MVVM,了解DataSource跟Delegate一定要好好看这系列文章
https://www.objc.io/issues/13-architecture/mvvm/

ReactiveCocoa

  • 在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。

  • 比如按钮的点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供的方式。
    其实这些事件,都可以通过RAC处理

  • ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。非常符合我们开发中高聚合,低耦合的思想。

ReactiveCocoa结合了几种编程风格:

  • 函数式编程(Functional Programming)

  • 响应式编程(Reactive Programming)

所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。

以后使用RAC解决问题,就不需要考虑调用顺序,直接考虑结果,把每一次操作都写成一系列嵌套的方法中,使代码高聚合,方便管理。

  • 信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。

  • 默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。

  • 如何订阅信号:调用信号RACSignal的subscribeNext就能订阅。

原文链接:http://www.jianshu.com/p/87ef6720a096

信号会为了控制通过应用的信息流而获得所有这些异步方法(委托, 回调 block, 通知, KVO, target/action 事件观察, 等)并将它们统一到一个接口下.这只是直观理解. 不仅是这些, 因为信息会流过你的应用, 它还提供给你轻松转换/分解/合并/过滤信息的能力.
这里写图片描述那么什么是信号呢?这是一个信号:
这里写图片描述

ReactiveCocoa signal(RACSignal)发送事件流给它的subscriber。目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。

在登录界面中,你可以这样用

监听文本框文字改变:
rac_textSignal:只要文本框发出改变就会发出这个信号。
这里写图片描述

一句话,核心就是信号,block一定要学好

Github

git太好用了不多说

clang swift llvm3.6

Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成,可以作为多种语言编译器的后台来使用。
Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

好在哪?

  1. 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
  2. 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
  3. GCC 兼容性。
    设计清晰简单,容易理解,易于扩展增强。
  4. 基于库的模块化设计,易于 IDE 集成及其他用途的重用。

由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。
Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。

CMake语言

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

CMake 使用方法
CMake的所有的语句都写在一个叫:CMakeLists.txt 的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关 的变量值进行配置。这个命令必须指向CMakeLists.txt所在的目录。配置完成之后,应用cmake命令生成相应的makefile(在Unix like系统下)或者 project文件(指定用window下的相应编程工具编译时)。

project(HELLO)
set(SRC_LIST main.c)
add_executable(hello ${SRC_LIST})

swift silver

诸如AppCode、PaintCode、Quick等开发、设计与测试工具已完全支持Swift,而跨平台工具Apportable也已支持使用Swift开发iOS和Android原生应用,如今,又有一款名为Silver颇为强劲的工具让开发者可以直接使用Swift语言来编写iOS、Android、Windows应用。
Silver编译器能编译Swift代码运行在.NET和Java运行时上。开发Silver的公司RemObjects不允许开发者利用它开发完整的跨平台应用,理由是用户界面应该原生开发

ARC和MRC

  1. * Objective-c语言中的MRC(MannulReference Counting)*

在MRC的内存管理模式下,与对变量的管理相关的方法有:retain,release和autorelease。retain和release方法操作的是引用记数,当引用记数为零时,便自动释放内存。并且可以用NSAutoreleasePool对象,对加入自动释放池(autorelease调用)的变量进行管理,当drain时回收内存。

(1) retain,该方法的作用是将内存数据的所有权附给另一指针变量,引用数加1,即retainCount+= 1;

(2) release,该方法是释放指针变量对内存数据的所有权,引用数减1,即retainCount-= 1;

(3) autorelease,该方法是将该对象内存的管理放到autoreleasepool中。

  1. **Objective-c语言中的
    ARC(AutomaticReference Counting)**

在ARC中与内存管理有关的标识符,可以分为变量标识符和属性标识符,对于变量默认为__strong,而对于属性默认为unsafe_unretained。也存在autoreleasepool。

这里写图片描述
MRC与ARC区别示意图


事实上,ARC可能比MRC更慢,但我们还是尽可能使用它,因为他让我们不用过多关心内存的问题。
性能比较分析:http://stackoverflow.com/questions/12527286/are-there-any-concrete-study-of-the-performance-impact-of-using-arc

UITableView的渲染顺序

  1. numberOfRowsInSection 每个section中有多少行cell
  2. heightForRowAtIndexPath 每个cell的高度
  3. cellForRowAtIndexPath 每个cell中的内容
  4. tableview 根据cell的个数,高度,内容来进行自动布局
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值