Swift 封装一个视频播放器 VGPlayer
# 前言
之前学习了 Swift 一直想做一个项目,这次下定决心花了近1个月的空闲时间基于 AVPlayer 封装了一个视频播放器。
# 源代码
- GitHub地址:VGPlayer
- 有什么意见建议可以提 issues,在博文下留言,如果觉得不错,欢迎点star。
之前学习了 Swift 一直想做一个项目,这次下定决心花了近1个月的空闲时间基于 AVPlayer 封装了一个视频播放器。
在dribbble看到一个Switch动画效果就手痒想实现,下面就是我实现的思路。
GitHub地址:VGGradientSwitch
如果觉得不错,欢迎点star。
来自dribbble上的设计作者 Nick Buturishvili
反复地复习iOS基础知识和原理,打磨知识体系是非常重要的,本篇就是重新温习iOS的内存管理。
内存管理是管理对象生命周期,在对象不需要时进行内存释放的编程规范。
Objective-C内存管理使用使用引用计数(Reference Counting)来管理内存。
在OS X 10.8以后也不再使用垃圾回收机制,iOS则从来都没有支持垃圾回收机制。
当create
或者copy
对象时,会计数为1,其他对象需要retain
时,会增加引用计数。持有对象的所有者也可以放弃所有权,放弃所有权时减少计数,当计数为0时就会释放对象。
如图:
Cocoa中使用NSNotification、NSNotificationCenter和KVO来实现观察者模式,实现对象间一对多的依赖关系。
本篇文章主要来讨论NSNotification和NSNotificationCenter
NSNotification
是方便NSNotificationCenter
广播到其他对象时的封装对象,简单讲即通知中心对通知调度表中的对象广播时发送NSNotification
对象。
|
|
NSNotification
对象包含名称、object、字典三个属性,名称是用来标识通知的标记,object是要通知的对象可以为nil
,字典用来存储发送通知时附带的信息,也可以为nil
。
虽然在ARC时代我们可以完全不知道Autorelease
就能管理好内存,但在了解objc
内存管理还是十分重要的,在阅读了书籍和一些干货并动手验证之后,决定总结autoreleasePool
的实现。
autoreleasePool
如何实现需要先知道什么是autorelease
?
autorelease
类似于C语言中Automatic variable自动变量,程序执行时,若某自动变量超出其作用域,该自动变量将被自动废弃。
面试时提问objc
内存管理基本都会问到autorelease
何时释放,在没有使用@autoreleasepool
的情况,autorelease
对象是在当前的runloop
迭代结束时释放。
每个runloop中都会创建一个 autoreleasepool
并在runloop迭代结束进行释放。
如果是手动创建autoreleasepool
,自己创建Pool并释放:
|
|
Apple
文档中提到:
不管是MRC
还是ARC
最好使用@autoreleasepool blocks。
文章是阅读《Objective-C高级编程:iOS与OS X多线程和内存管理》之后的一些理解总结。
理解Block如何实现,需要了解
Block
?Block
的语法Block
是C
语言的拓展功能。在Apple文档中有一句话说明:
|
|
其他语言和环境,一个block
对象有时候也被称作closure
闭包或^
;
在阮一峰的学习Javascript闭包(Closure)中解释了什么是闭包。
闭包就是能够读取其他函数内部变量的函数。
数据层一直是程序的核心结构之一,在iOS开发过程中通常需要对数据进行持久化缓存以保证在无网络情况下打开App后进行一些展示或缓存聊天记录等,这时候就需要持久化数据。
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。cmp和Hibernate只是对象模型到关系模型之间转换的不同实现。
在项目开发中我最常使用的持久化方式有:
Tuples group multiple values into a single compound value. The values within a tuple can be of any type and do not have to be of the same type as each other.
元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
|
|
上面这个例子中,(“Vein”, 66)
是一个人的姓名和体重的元组。("Vein", 66)
元组把一个String
和一个Int
两个不同的类型组合起来。
你也可以随意组合不同类型如:(Int
, Int
, Double
、(String
, Bool
)或者(String
, String
, String
)等等其他任何你想组合的元组。
Apple 发布了Swift 3.0,版本语法应该相对稳定了,开始新一轮学习。
Swift学习主要从The Basics开始学习,虽然之前已经学习过Objective-C,但还是过一遍基本的语法。
Swift
provides its own versions of all fundamentalC
andObjective-C
types, includingInt
for integers, DoubleandFloat
for floating-point values,Bool
for Boolean values, andString
for textual data.Swift
also provides powerful versions of the three primary collection types,Array
,Set
, andDictionary