0%

使用`+load`方法替换NSObject的 `-setValue:forUndefinedKey:` / `valueForUndefinedKey:` / `setNilValueForKey:` 这几个方法,防止产生 `NSUnknownKeyException` 和 `NSInvalidArgumentException` 异常,引发崩溃。
阅读全文 »

涉及到objc_msgSend(id, SEL, ...),Object,Class,meta class,方法的调用过程,Unrecognized Selector 错误,一些runtime的函数以及作用,NSObject的 +load 方法,以及TPreventUnrecognizedSEL的实现,包含了FastForwarding和NormalForwarding的具体实现;包括如何替换/添加方法,来实现避免 Unrecognized Selector 错误的产生等内容。
阅读全文 »

TPreventUnrecognizedSEL 项目的 GitHub 地址: https://github.com/tobedefined/TPreventUnrecognizedSEL
TPreventUnrecognizedSEL 实现思路以及原理:LINK

特点

  • 使用runtime动态添加方法防止产生Unrecognized Selector错误,可以防止因为对象方法和类方法缺失所产生的APP崩溃。

    对象方法:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TestClass losted:instance:method:]: unrecognized selector sent to instance 0x102c....'

    类方法:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[TestClass losted:class:method:]: unrecognized selector sent to class 0x10000....'

  • 可以获取缺失方法的具体信息,包括:

    • 缺失类方法或对象方法的类名;
    • 所缺失的方法名;
    • 缺失的是对象方法还是类方法。
阅读全文 »

一些关于iOS 11的新内容以及对应改变的适配方法,包括UITableView的改变,UIBarButtonItem变化,navigation的变化以及UIToolBar、UIViewController、UIScrollView(及其子类)和safeArea等。包括对第三方库MJRefresh的适配。
阅读全文 »

一些关于Swift 4的基本语法、Foundation的改变,包括Extension、Protocol、KeyPath、String、Codable、Encode、Decode等方面的改变
阅读全文 »

最近回顾了一下GCD的使用方法,想了想还是整理一下,就把GCD整理了一下,主要是基本都是GCD多线程使用,串并行队列,以及GCD多线程之间的同步问题做了一下的整理。
阅读全文 »

很久之前写的一个很简单的库,最近整理了一下发到github了

特点

兼容Objective-Cswift

TWebView

  • 支持自动根据系统版本选择使用UIWebView还是WKWebView加载网页
  • 使用方法简单,与UIWebView的使用方法极其类似,简化WKWebView的使用
  • 双代理模式,支持使用通用的代理commonDelegate(通用代理的类建议使用singleton单例模式),也支持同时设置普通的代理delegate

    默认情况下普通代理delegate里实现的方法会优先于通用代理commonDelegate里实现的同名方法;

    在普通代理delegate中实现某个方法的情况下不会去调用通用代理commonDelegate中的同名方法。(如果需要可以在普通代理delegate的该方法中使用[webView.commonDelegate someFunc..]主动调用通用代理commonDelegate的该方法)

  • 支持显示ProgressViewUIWebView的Progress使用了NJKWebViewProgress中的部分代码进行模拟进度,支持配置ProgressView的颜色
  • 支持配置是否允许滑动返回(canScrollBack)
  • 支持配置是否可以放大缩小网页(canScrollChangeSize)
  • 支持配置是否屏蔽长按链接显示ActionSheet和MenuController(blockTouchCallout)
  • 支持配置是否屏蔽链接的3DTouch预览(block3DTouch)
阅读全文 »

问题的产生

最近在做一个需求,其中有一个场景是一个对象从外部传入一个默认的Array,对象根据一些其他的配置自动对Array进行一些处理,同时使默认的Array也作出增减操作。

因为在ObjCNSMutableArray是引用类型,所以这就很简单了,不需要做什么特殊处理。但是在SwiftArray是值类型(struct),定义如下:

1
2
3
4
public struct Array<Element> : RandomAccessCollection, MutableCollection {
......
......
}
阅读全文 »

演示

特点

  • 完美兼容Objective-Cswift
  • 支持用户滑动和点击tab
  • 支持滑动返回(在任意的tab)
  • 支持FrameAutolayout自动布局,你可以使用Masonry/SnapKit/NSLayoutConstraint去布局view
  • 支持放入普通的UIView(以及非滑动的UIView子类View),UIScrollViewUITableView
  • 支持的UITableView添加tableHeaderView
  • 支持UITableView添加 section header view,并且显示不会出现悬停位置不正确的情况
  • 支持自定义 SegmentedControlView (tab点选)的样式,你可以自己设置动画、自己设置高度等等等
阅读全文 »

暂未完成的文章,文中介绍了CoreML,TensorFlow和Keras的安装,以及TensorFlow在iOS上的使用,包含一个小的demo,LibTensorFlowForiOSSwift,地址在github:https://github.com/tobedefined/LibTensorFlowForiOSSwift 。
阅读全文 »