WKWebView 类

一个WKWebView对象可以显示交互式的web内容.就像一个应用程序的浏览器.你可以使用WKWebView类嵌入Web内容的应用程序.这样做,创造一个WKWebView对象,设置为它的view.并发送一个请求来加载网页的内容

一.Overview 概述

重要提示:

在 iOS 8.0 和 OS X 10.10 之后,使用WKWebView来加载网页内容到你的App,不要再使用 UIWebViewWebView

1.创建一个新的WKWebView

下面的方法是一个初始化方法,可以通过WKWebViewConfiguration来自定义配置.只能在初始化的时候进行配置,初始化之后修改configuration对web视图没有影响.你也可以使用initWithframe:方法,这个方法使用的是默认的配置.

  1. // 参数1 : frame: 新webView 的frame
  2. // 参数2: configuration : 新webView 的配置
  3. - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration;
2.加载网页内容.

[1]加载本地 HTML 文件

  1. // string : 作为网页内容使用的字符串
  2. // baseURL : 解析文档中相对URL的URL
  3. - (WKNavigation *)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

[2]加载web内容

  1. // request : 指定导航到的URL的请求
  2. - (WKNavigation *)loadRequest:(NSURLRequest *)request;
3.停止加载当前页上的所有资源
  1. - (void)stopLoading;
4.确定web视图是否处于加载的过程中.

如果正在加载内容,则设置为ture.否则false.WKWebView 可以通过 KVO 来监听此属性的变化.

  1. @property (nonatomic, readonly, getter=isLoading) BOOL loading;
5.通过 WKUIDelegate 代理属性来监听网络内容的加载
6.在历史记录中向后导航.
  1. - (WKNavigation *)goBack;
7.向前导航
  1. - (WKNavigation *)goForward;
8.确定是否可以向前还是向后的属性
  1. @property (nonatomic, readonly) BOOL canGoBack;
  2. @property (nonatomic, readonly) BOOL canGoForward;
9.链接时数据检测类型

因为在默认的情况下,一个 webView 中会自动将出现在 web 内容种电话号码转换为电话链接.当一个电话链接被点击时,手机 App 开始拨号.那么为了关掉这一行为,需要设置 WKDataDetectorTypes 属性.

  1. @property (nonatiomic) WKDataDetectorTypes dataDetectorTypes;
  1. // 检测到的东西都转为对应的链接了
  2. typedef enum WKDataDetectorTypes : NSUInteger {
  3. WKDataDetectorTypeNone = 0,
  4. WKDataDetectorTypePhoneNumber = 1 << 0,
  5. WKDataDetectorTypeLink = 1 << 1,
  6. WKDataDetectorTypeAddress = 1 << 2,
  7. WKDataDetectorTypeCalendarEvent = 1 << 3,
  8. WKDataDetectorTypeTrackingNumber = 1 << 4,
  9. WKDataDetectorTypeFlightNumber = 1 << 5,
  10. WKDataDetectorTypeLookupSuggestion = 1 << 6,
  11. WKDataDetectorTypeAll = NSUIntegerMax,
  12. WKDataDetectorTypeSpotlightSuggestion = WKDataDetectorTypeLookupSuggestion
  13. } WKDataDetectorTypes;
10.用指定的因素对页面内容进行缩放,并将结果集中在指定的点上
  1. // magnification : 缩放内容的因素
  2. - (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;

二.Symbols

1.初始化 webView

  1. @property(nonatomic, readonly, copy) WKWebViewConfiguration *configuration;
  1. - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration;
  1. - (instancetype)initWithCoder:(NSCoder *)coder;

2.查看视图信息

1.与 webView 关联的 scrollView

  1. @property(nonatomic, readonly, strong) UIScrollView *scrollView;

2.页面标题

WKWebView 可以通过 KVO 来观察此属性

  1. @property (nonatomic, readonly, copy) NSString *title;

3.活动网址

符合 KVO

  1. @property(nonatomic, readonly, copy) NSURL *URL;

4.自定义用户代理字符串

  1. @property(nonatomic, copy) NSString *customUserAgent;

5.当前提交导航的一个 SecTrustRef 对象

  1. @property(nonatomic, readonly) SecTrustRef serverTrust;

3.设置代理

1.webView的导航代理

  1. @property(nonatomic, weak) id<WKNavigationDelegate> navigationDelegate;

2.webview 的用户交互代理

  1. @property(nonatomic, weak) id<WKUIDelegate> UIDelegate;

4.加载内容

1.估计当前导航加载的进度

  1. @property(nonatomic, readonly) double estimatedProgress;

2.布尔值,页面上的所有资源是否已通过安全加密连接加载

  1. @property(nonatomic, readonly) BOOL hasOnlySecureContent;
  1. - (WKNavigation *)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;

4.布尔值,表示视图当前是否正在加载内容

  1. @property(nonatomic, readonly, getter=isLoading) BOOL loading;

5.刷新当前页面

  1. - (WKNavigation *)reload;

6.如果可能的话,通过使用缓存验证条件,端到端的验证来重新载入当前页面

  1. - (WKNavigation *)reloadFromOrigin.

7.停止加载

  1. - (void)stopLoading;
  1. // 1.data : 网页内容使用的数据
  2. // 2.MIMEType : 数据的MIME类型
  3. - (WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL;

9.导航到所请求的文件系统上的文件的URL

  1. - (WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL;

5.缩放内容

1.是否通过放大手势来改变webview 的放大倍率

  1. @property(nonatomic) BOOL allowsMagnification;

2.当前页面内容的缩放因子.默认1.0

  1. @property (nonatomic) CGFloat magnification;

3.用指定的因子对页面内容进行缩放.并将结果集中在指定的点上

  1. - (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;

6.导航

1.布尔值.是否可以通过水平滑动手势来操作前进或后退的导航

  1. @property(nonatomic) BOOL allowsBackForwardNavigationGestures;

2.webview 的前向列表

  1. @property(nonatomic, readonly, strong) WKBackForwardList *backForwardList;
  2. @property(nonatomic, readonly) BOOL canGoBack;
  3. @property(nonatomic, readonly) BOOL canGoForward;
  4. // 决定链接是否可用
  5. @property(nonatomic) BOOL allowsLinkPreview;
  6. - (WKNavigation *)goBack;
  7. - (WKNavigation *)goForward;
  8. // 导航到一个项目从后向前列表并设置为当前项目
  9. - (WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;
  10. // 导航到一个 URL
  11. - (WKNavigation *)loadRequest:(NSURLRequest *)request;

7.执行 JavaScript

  1. - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *error))completionHandler;

8.实例方法


  1. // 1.
  2. - (IBAction)goBack:(id)sender;
  3. // 2.
  4. - (IBAction)goForward:(id)sender;
  5. // 3.
  6. - (IBAction)reload:(id)sender;
  7. // 4.
  8. - (IBAction)reload:(id)sender;
  9. // 5.
  10. - (IBAction)stopLoading:(id)sender;

其他相关类说明

一.WKUIDelegate

1.创建一个新的webView

  1. // 1.webView : 调用代理方法的webview
  2. // 2.configuration : 创建新的webview 时用到的配置
  3. // 3.navigationAction : 创建新web视图的导航操作
  4. // 4.windowFeatures : 网页要求的窗口特性
  5. - (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNanigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;

2.显示用户UI界面

[1]显示一个 JavaScript警报面板

  1. // 1.webview : 调用代理方法的webview
  2. // 2.message : 要显示的message
  3. // 3.frame : 关于 JavaScript 进程发起此嗲偶偶那个的框架的信息.
  4. // 4.completionHandler : 警报面板调用完成之后的回调
  5. - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;

注意:

对与用户安全来讲,实现这个方法要注意到一个事实,就是一个特定的网站控制这个警报面板的内容.识别控制网站的最简单的方法是用frame.request.URL.host.这个警报面板应该有一个OK按钮.

[2]显示一个 JavaScript 确认面板

  1. - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;

[3]显示一个 JavaScript 文本输入面板

  1. // 1.prompt : 要显示的消息
  2. // 2.defaultText : 要显示的初始文本
  3. - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *result))completionHandler;

3.关闭web视图

通知App成功关闭DOM窗口

  1. - (void)webViewDidClose:(WKWebView *)webView;

注意:

应用程序要从视图结构中将 web 视图删除.并且更新UI.如关闭包含的浏览器选项卡或窗口

4.显示上传面板

  1. // 1.parameters : 描述文件上传控件的参数
  2. - (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> *URLs))completionHandler;

注意:

如果没有实现此方法,webView 就会表现出像用户选择取消按钮一样.

5.Responding to Force Touch Actions

[1]确定是否应该显示给定的元素

  1. - (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo;

[2]当用户执行 a peek action(一瞥?偷看?)时调用

  1. - (UIViewController *)webView:(WKWebView *)webView previewingViewControllerForElement:(WKPreviewElementInfo *)elementInfo defaultActions:(NSArray<id<WKPreviewActionItem>> *)previewActions;

[3]当用户在预览时执行弹出动作时调用

  1. - (void)webView:(WKWebView *)webView commitPreviewingViewController:(UIViewController *)previewingViewController;

二.WKNavigationDelegate

当你在web视图的接受过程中,加载,完成导航请求时,WKNavigationDelegate 协议的方法帮助你实现自定义行为,

1.初始化 Navigation

当webView 开始接收web内容时调用

  1. - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;

当web内容开始在一个webview加载时调用

  1. - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;

2.响应服务器操作

  1. - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;

2.当webView接收服务器重定向时调用

  1. - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;

3.反应错误

1.导航期间发生错误时调用

  1. - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error;

2.webView 加载内容时发生错误时调用

  1. - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error;

4.跟踪负荷的进度

1.导航完成时调用

  1. - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;

2.当webview 的web内容进程终止的时候调用

  1. - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView;

5.允许导航

1.决定是否允许或取消导航

  1. - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

2.决定是否在其响应已知后允许导航或取消导航

  1. - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;

6.导航策略

  1. typedef enum WKNavigationActionPolicy : NSInteger {
  2. WKNavigationActionPolicyCancel,
  3. WKNavigationActionPolicyAllow
  4. } WKNavigationActionPolicy;

7.实例方法

当 web视图需要响应身份验证挑战时调用

  1. - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler;

三.WKWebViewConfiguration 类

用于初始化 Web 视图的属性集合


一.Overview 概述

使用 WKWebViewConfiguration 这个类,你可以决定如何尽快的来呈现一个网页.它有许多属性可以设置,媒体播放,用户可选择项的粒度,和许多其他的选择.

WKWebViewConfiguration 这个类,是只有当一个 Web 视图在初始化的时候,才能被使用.在我们创建了 Web 视图之后,不能使用这个类来更改其配置了.


二.Symbols 标志

Configuring the New Web View's Properties 配置新Web视图的属性

1.applicationNameForUserAgent

在用户代理字符串中使用的应用程序名称

  1. @property (nonatomic, copy) NSString *applicationNameForUserAgent;

2.preferences

web 视图使用的首选项

  1. @property (nonatomic, copy) WKPreferences *preferences

3.processPool

获取视图web内容过程的流程池

当Web视图初始化时,要么为指定的池创建一个新的web内容流程,要么使用该池中的现有进程

  1. @property(nonatomic, strong) WKProcessPool *processPool;

4.userContentController

与web视图关联的用户内容控制器

  1. @property(nonatomic, strong) WKUserContentController *userContentController;

5.websiteDataStore

web视图所使用的网站数据存储

如果Web视图和一个非持久性数据存储相关联,没有数据被写入文件系统,此属性实现Web视图中的私有浏览.

  1. @property(nonatomic, strong) WKUserContentController *userContentController;

Determining Webpage Scalability 确定网页的扩展性

1.ignoresViewportScaleLimits

一个 布尔值,确定 wkwebView对象是否总是允许网页缩放

将此属性设置为TRUE,可以使网页进行缩放,而不管作者的意图如何.默认是FALSE

  1. @property(nonatomic) BOOL ignoresViewportScaleLimits;

Setting Rendering Preferences 设置渲染参数

1.suppressesIncrementalRendering

一个布尔值,指示 web 视图是否在完全加载到内存中之前禁止内容呈现

默认是NO

  1. @property(nonatomic) BOOL suppressesIncrementalRendering;

Setting Media Playback Preferences 设置媒体播放首选项

1.allowsInlineMediaPlayback

一个布尔值,指示 HTML5 视频是否在线播放或使用本机全屏控制器

你必须将此属性设置为播放(inline video)内联视频.设置这个属性为true来播放在线视频.设置这个属性为false来使用原生的全屏控制器来播放视频.当添加一个HTML视频文件到iPhone上的时候,你必须包含playsinline属性.

这个属性对于iPhone来说,默认是false,对于iPad来说,默认是true.

注意: 在 iOS 10.0 之后必须使用webkit-playsinline属性

  1. @property (nonatomic) BOOL allowsInlineMediaPlayback;

2.allowsAirPlayForMediaPlayback

一个布尔值,指示 AirPlay 是否可用.默认YES.

  1. @property(nonatomic) BOOL allowsAirPlayForMediaPlayback;

3.allowsPictureInPictureMediaPlayback

一个布尔值,指示HTML5视频是否支持画中画,默认YES.

  1. @property (nonatomic) BOOL allowsPictureInPictureMediaPlayback;

4.mediaTypesRequiringUserActionForPlayback

确定哪些视频类型需要用户手势开始播放

  1. @property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback;

5.mediaPlaybackAllowsAirPlay[过期方法]

  • 过期!用allowsAirPlayForMediaPlayback方法替代.

6.requiresUserActionForMediaPlayback[过期方法]

  • 布尔值,指示 HTML5 视频是否需要用户控制播放还是视频自动播放

7.mediaPlaybackRequiresUserAction[过期方法]

  • mediaTypesRequiringUserActionForPlayback替代

8.WKAudiovisualMediaTypes

需要通过用户的手势才开始播放的媒体类型

  1. typedef enum WKAudiovisualMediaTypes : NSUInteger {
  2. WKAudiovisualMediaTypeNone = 0,
  3. WKAudiovisualMediaTypeAudio = 1 << 0,
  4. WKAudiovisualMediaTypeVideo = 1 << 1,
  5. WKAudiovisualMediaTypeAll = NSUIntegerMax
  6. } WKAudiovisualMediaTypes;

Setting Selection Granularity 设置选择粒度

1.selectionGranularity

用户可以交互选择web视图中的内容的粒度级别.默认是WKSelectionGranularityDynamic

  1. @property (nonatomic) WKSelectionGranularuty selectionGranularity;

2.WKSelectionGranularity

可以以交互的方式创建和修改选择的粒度

  1. typedef enum WKSelectionGranularity : NSInteger {
  2. WKSelectionGranuarityDynamic,
  3. WKSelectionGranularityCharacter
  4. } WKSelectionGranularity;

Selecting User Interface Directionality 选择用户界面方向性

1.userInterfaceDirectionPolicy

用户界面元素的方向性

  1. @property(nonatomic) WKUserInterfaceDirectionPolicy userInterfaceDirectionPolicy;

2.WKUserInterfaceDirectionPolicy

用于确定web视图中用户界面元素方向性的策略

  1. typedef enum WKUserInterfaceDirectionPolicy : NSInteger {
  2. WKUserInterfaceDirectionPolicyContent,
  3. WKUserInterfaceDirectionPolicySystem
  4. } WKUserInterfaceDirectionPolicy;

Identifying Data Types 识别数据类型

1.dataDetectorTypes

所需的数据检测类型

  1. @property(nonatomic) WKDataDetectorTypes dataDetectorTypes;

2.WKDataDetectorTypes

检测到的数据类型

  1. typedef enum WKDataDetectorTypes : NSUInteger {
  2. WKDataDetectorTypeNone = 0,
  3. WKDataDetectorTypePhoneNumber = 1 << 0,
  4. WKDataDetectorTypeLink = 1 << 1,
  5. WKDataDetectorTypeAddress = 1 << 2,
  6. WKDataDetectorTypeCalendarEvent = 1 << 3,
  7. WKDataDetectorTypeTrackingNumber = 1 << 4,
  8. WKDataDetectorTypeFlightNumber = 1 << 5,
  9. WKDataDetectorTypeLookupSuggestion = 1 << 6,
  10. WKDataDetectorTypeAll = NSUIntegerMax,
  11. WKDataDetectorTypeSpotlightSuggestion = WKDataDetectorTypeLookupSuggestion
  12. } WKDataDetectorTypes;

三.Relationships 关系


Inherits From 继承

NSObject


Conforms To 符合

NSCoding

NSCopying

WKWebView 官方文档的更多相关文章

  1. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  2. 2DToolkit官方文档中文版打地鼠教程(三):Sprite Collections 精灵集合

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  3. 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  4. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  5. 【AutoMapper官方文档】DTO与Domin Model相互转换(中)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  6. 【AutoMapper官方文档】DTO与Domin Model相互转换(下)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

  7. Ionic2系列——Ionic 2 Guide 官方文档中文版

    最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ...

  8. Kotlin开发语言文档(官方文档)-- 目录

    开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...

  9. 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍

    我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...

随机推荐

  1. shell 分割字符串存至数组

    shell 分割字符串存至数组 shell编程中,经常需要将由特定分割符分割的字符串分割成数组,多数情况下我们首先会想到使用awk但是实际上用shell自带的分割数组功能会更方便.假如a=”one,t ...

  2. Python中使用with语句同时打开多个文件

    下午小伙伴问了一个有趣的问题, 怎么用 Python 的 with 语句同时打开多个文件? 首先, Python 本身是支持同时在 with 中打开多个文件的 with open('a.txt', ' ...

  3. FineReport使用总结

    一.常用函数和变量 1. 日期 1.1 now() 当前时间 1.2 today() 今天 1.3 格式化显示,插入公式 =format($$$,"yyyy年MM月dd日 HH:mm&quo ...

  4. nodejs querystring踩坑笔记----只能用于表单提交

    API中的实例: var http = require('http'); var querystring = require('querystring'); var postData = querys ...

  5. 我的开发环境搭建(ubuntu菜鸟)

    前段时间把系统换成了ubuntu,经过一段时间到发展,终于可以比较正常到完成开发工作了,但是就在今天,我的系统崩了,进不了桌面,而且终端里边到中文也显示乱码,尝试了网上说到各种方法无效,最终我决定重装 ...

  6. Linux目录与文件的权限

    零.Linux中的权限为什么重要? 权限直接关系数据安全! 一.用户基础概念: 所有者(owner):拥有这个文件的用户.一般拥有目录或文件的所有权限. 用户组(group):几个用户组成一个用户组, ...

  7. C#基础知识-流程控制的应用(四)

    流程控制我们在编程中运用到的地方非常的多,在上篇中仅仅只是简单的介绍每一种的使用,并没有运用到实例中,很难去理解它真正的作用.下面我们将实际的运用流程控制的代码写一些实例相关的程序,加深对流程控制的理 ...

  8. highlight.js 代码高亮插件的使用

    在网页使用过程中,经常会用到代码的展示.而不同颜色的代码,可以让代码看起来更直观,也更美观. 找了几个不同的插件,觉得highlight的插件比较实用,而且用起来炒鸡简单. 比如这样: 首先,我们先下 ...

  9. iOS之RunLoop

    RunLoop是iOS线程相关的比较重要的一个概念,无论是主线程还是子线程,都对应一个RunLoop,如果没有RunLoop,线程会马上被系统回收. 本文主要CFRunLoop的源码解析,并简单阐述一 ...

  10. Python之返回函数

    高阶函数可以把函数作为一个结果值返回 举例说明 普通的求积函数是 vim day5-6.py #!/usr/bin/python # -*- coding:utf-8 -*- def product( ...