在此之前就看到过斯坦福公开课《Developing iOS9 Apps With Swift》,一直没能静下心来认真学习。最近工作比较轻松时间充足,打算用两个月的时间,认真学习斯坦福iOS9开发视频。本文集,一方面通过视频可以学习Swift,另一方面通过记录笔记督促学习。
课程地址:【最新】Developing iOS 9 Apps with Swift(斯坦福大学公开课:iOS 9开发)
多说无益,开始吧!
what`s in iOS关于iOS系统参考:官方文档
Core OSCore OS Layer包含大多数技术所基于的低级功能。即使不直接在应用中使用这些技术,它们也很可能被其他框架使用。在需要明确处理安全性或与外部硬件附件通信的情况下,您可以使用此层中的框架。
主要包含:
Accelerate.framework :包含用于执行数字信号处理(DSP),线性代数,和图像处理的计算机接口。框架有点是,他们对所有存在的iOS设备的硬件配置进行优化。因此可以编写一次代码保证其高效运行在所有设备上。
CoreBluetooth.framework: 蓝牙框架让开发人员能够使 ...
前言本文记录webView和JS交互的基本使用,也算是对WebViewJavascriptBridge初步认识。
版本:5.0
地址:Github
原生端原生端配置
初始化创建WebViewJavascriptBridge对象
12_bridge = [WebViewJavascriptBridge bridgeForWebView:_webViewjs];[_bridge setWebViewDelegate:self];
初始化方法:bridgeForWebView实现如下
123456789101112+ (instancetype)bridgeForWebView:(WVJB_WEBVIEW_TYPE*)webView { WebViewJavascriptBridge* bridge = [[self alloc] init]; [bridge _platformSpecificSetup:webView]; return bridge;}//调用如下方法- (void) _platformSpecificSetup:(WVJB_ ...
本文主要整理了Objective-C的Block实现方式。iOS 其他相关博文链接**iOS-day-by-day**
Block语法Block可以认为是一个匿名函数。语法声明如下:
1return_type (^block_name)(parameters)
例如:
1double (^multiplyTwoValues)(double, double);
Block字面值的写法:
123^ (double firstValue, double secondValue) { return firstValue *secondValue;}
上面写法省略了返回值的类型,可以显示的指出返回值类型。
12345typedef double (^MultiplyTwoVlaues)(double, double); MultiplyTwoVlaues mtv = ^(double firstValue, double secondValue){ return firstValue * secondValue; ...
好记性不如烂笔头。本文是根据官方文档整理的笔记,理论性比较强,基础知识,如有错误还请指正。
Run Loops是线程相关的基础框架的一部分。runloop就是一个事件处理的循环,用来不停的调度工作及处理输入事件。使用runloop的目的是让你的线程在有工作的时候工作,没工作的时候休眠。
RunLoop解析Run loop 本身听起来就和像它的名字。它是一个循环,你的线程进入并使用它来运行响应输入事件的事件处理程序。Run loop接收事件来自两种不同来源:输入源(input source)和定时源(timer source)。
输入源传递异步事件,通常消息来自于其他线程或程序。
定时源则传递同步事件,发生在特定的时间或者重复的时间间隔。
两种源都使用程序的某一特定的处理例程来处理到达的事件。
下图显示Runloop的概念结构以及各种源。
由图:
输入源 传递一步消息给相应的处理线程,并调用runUntilDate:方法退出。
定时源 直接传递消息给处理线程,但是并不退出run loop。
另外,run loops也会生成关于run loop行为的通知。添加Observer ...
本文只是整理Runtime中,成员变量、属性、关联对象、方法交换使用实例。不会很细致的讲解Runtime的内容,如果想了解Runtime更多内容,可以移步这里,查看大神们关于Runtime博文。
成员变量和属性成员变量(Ivar)定义1、Ivar:实例变量类型, 其实是一个指向objc_ivar结构体的指针
1typedef struct objc_ivar *Ivar;
操作方法1234567// 获取成员变量名字const char * ivar_getName(Ivar v);// 获取成员变量类型编码const char * ivar_getTypeEncoding(Ivar v);//获取成员变量的偏移量ptrdiff_t ivar_getOffset(Ivar v);//注:对于id类型或其他类型对象的实例变量,可以调用object_getIvar和object_setIvar直接访问成员变量,而不使用偏移量。
使用实例User.h
123456789101112@interface User : NSObject { NSString *_name;& ...
编程语言
未读枚举定义枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。Swift中枚举与C和Objective-C不同,这些枚举成员本身就是完整的值,这些值的类型是已经明确定义好的CompassPoint类型。枚举名字必须以一个大写字母开头。
enum CompassPoint {
case North
case South
case East
case West
}
//枚举多个成员可以出现在同一行,用逗号隔开
枚举定义了一个全新的类型,所有首字母必须大写。
var direction = CompassPoint.East
//简化
direction = .East
使用switch语句匹配枚举值
switch direction {
case .North:
print("North")
case .East:
print("East")
case .South:
print("South")
case ...
编程语言
未读本文介绍了Swift基本数据类型的使用,和与Objective-C语法的差别。另外,函数的基本语法,闭包(Closure)的基本语法,Closure与Function结合使用,以及一些需要注意的问题。
数据类型元祖(Tuples)Tuples可以把多个不同类型的值合成一个复合值。
123456789101112// Tuple typelet httpStatus = (200, "success")let httpErrorStatus = (404, "File not found")//避免使用, 程序可读性较差httpStatus.0httpErrorStatus.1//给每一个值起别名,使用名称访问let personInfo = (name: "Tom", age: 20, sex: "男")personInfo.namepersonInfo.agepersonInfo.sex
??123456789var nameString: String?var nameStringD = nameStr ...
CALayercontents属性CALayer有一个属性叫做contents,这个属性是id类型,可以接收任意类型的对象。
1234567/* An object providing the contents of the layer, typically a CGImageRef, * but may be something else. (For example, NSImage objects are * supported on Mac OS X 10.6 and later.) Default value is nil. * Animatable. */@property(nullable, strong) id contents;
但是我们在实际应用中只能赋CGImage,否则图层将是空白的。这是因为Mac OS的历史遗留下来的问题,在Mac OS系统中,contents可以接收CGImage和NSImage类型的值,但是在iOS系统中,则不支持UIImage类型的值。
contents实际上接收的是值是CGImageRef,它是指向CGImage结构的指针。UII ...
Objective-CObjective-C是一门动态语言。其实Objecitve-C扩展了C语言,加入了面向对象特性和消息传递机制。简单的说,这个扩展的核心是Runtime库,它是Objective-C面向对象的和动态机制的基石。Objective-C是动态的语言,意味着它不仅需要一个编译器,还需要一个运行时系统动态的创建类和对象、进行消息传递和转发。充分理解Runtime机制,可以帮助我们更好的学习Objective-C。下面一起学习Runtime:
类(Class)在Objective-C中,类和对象都是结构体。从头文件objc/objc.h中,可以查看定义。
12typedef struct objc_class *Class;
查看objc/runtime.h中objc_class结构体的定义
123456789101112131415struct objc_class { Class isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__ Class super_class ...