博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「 iOS知识小集 」2018 · 第 40 期
阅读量:6268 次
发布时间:2019-06-22

本文共 2593 字,大约阅读时间需要 8 分钟。

在过去的一周,Google 在 Flutter Live 2018 上正式发布了 Flutter 1.0。这也意味 Flutter 步入正轨,我们可以更多地去尝试这门技术。关于 Flutter 1.0 更多的信息,可以查看 。

上周公众号发布的以下文章:

本期知识小集的主要内容包括:

  • 关于 UIApplicationState 在 iOS 12.0 系统中的 Bug
  • 为 UIView “截屏”
  • 覆盖父类同名属性

关于 UIApplicationState 在 iOS 12.0 系统中的 Bug

作者:

UIApplicationState 分为三种状态:

  1. UIApplicationStateActive:App处于活跃状态(在前台并正在接收事件)
  2. UIApplicationStateInactive:App处于非活跃状态(在前台并未接收事件/正在前台进入后台、后台进入前台时)
  3. UIApplicationStateBackground:App处于后台状态

项目有个需求,当 App 在后台时,接收到消息需要弹本地通知。突然线上反馈说功能失效了,并且还是个别用户。经验证这是iOS12.0系统的 Bug,已经在 iOS 12.1 中修复了!

之前的逻辑是判断 App 是否在后台,使用了 UIApplicationStateBackground,但是在 iOS 12.0中,当 App 在后台时,获取系统状态返回为 UIApplicationStateInactive。

为 UIView “截屏”

作者:

想为某个 UIView 的内容生成一张图片,系统提供了非常方便的解决方式:使用 CoreGraphics

UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0);//获取当前上下文CGContextRef ctx = UIGraphicsGetCurrentContext();//渲染[view.layer renderInContext:ctx];UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;复制代码

若要为 UIView 生成 UIView 形式的快照,可以使用 UIView 的实例方法簇:

- (nullable UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates NS_AVAILABLE_IOS(7_0);复制代码

覆盖父类同名属性

作者:

日常开发中,我们都可能会碰到这种情况,继承系统的某个类,但是想要覆盖父类的某个属性名(大部分情况是 delegatedataSource)会发现两个烦人的 warning,代码如下所示。

@protocol VVLTextViewDelegate;@interface VVLTextView : UITextView// warning1: Property type 'id
' is incompatible with type 'id
_Nullable' inherited from 'UITextView'// warning2: Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its superclass, use @dynamic to acknowledge intention@property (nonatomic, weak) id
delegate;@end@protocol VVLTextViewDelegate
- (void)test;@end@implementation VVLTextView@end复制代码

这个时候除了重命名 delegate 之外,还有没有其它操作能够消除警告而且能正常使用呢?答案是肯定的。

根据警告,我们可以把 delegate 在 .m 里声明为 dynamic 的,然后再把 protocol 的定义放到类定义之前,即可实现,代码如下。

@protocol VVLTextViewDelegate 
- (void)test;@end@interface VVLTextView : UITextView@property (nonatomic, weak) id
delegate;@end@implementation VVLTextView@dynamic delegate;@end复制代码

像系统自带的一些类(比如 UICollectionView/UITableView)应该也是用类似方式来实现的吧,我猜。现在也终于想明白为什么系统的大部分协议定义都放在类之前了,应该跟这个有点关系。所以以后有类似需求,可以不需要再去重写一个属性名,然后复写其 setter 方法来赋值了。

特别推荐

SwiftGG 团队自 10.29 推出第一期 ggtalk 以来,已连续推出 7 期的内容。这是一个接地气、有价值的闲聊节目。一帮程序员,在无尽的接需求写代码改 bug 加班上线循环中开辟出来的一块空地,想想过去,聊聊现在,偶尔也展望一下未来。

7 期的内容清单如下:

  • 聊聊程序员的升职加薪(上)
  • 我都花时间搭博客了,为什么还要花时间写?
  • 和裕波聊聊如何办一场技术大会(上)
  • 和裕波聊聊如何办一场技术大会(下)
  • 聊聊程序员的升职加薪(下)
  • 聊聊 Swift 这四年(上)
  • 聊聊 Swift 这四年(下)

内容都非常不错,强烈推荐。详情内容可查看。

关注我们

欢迎关注我们的公众号:iOS-Tips,也欢迎加入我们的群组讨论问题。可以公众号留言 iosflutter 等关键词获取入群方式。

转载地址:http://lgppa.baihongyu.com/

你可能感兴趣的文章
jdk目录详解及其使用方法
查看>>
说说自己对RESTful API的理解s
查看>>
通过layout实现可拖拽自动排序的UICollectionView
查看>>
服务器错误码
查看>>
javascript中的面向对象
查看>>
Splunk作为日志分析平台与Ossec进行联动
查看>>
yaffs文件系统
查看>>
Mysql存储过程
查看>>
NC营改增
查看>>
Lua
查看>>
Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
查看>>
postgresql 获取刚刚插入的数据主键id
查看>>
C# Activex开发、打包、签名、发布 C# Activex开发、打包、签名、发布 [转]
查看>>
05-Vue入门系列之Vue实例详解与生命周期
查看>>
验证码展示
查看>>
浅谈大型web系统架构
查看>>
淘宝大秒系统设计详解
查看>>
linux如何修改登录用户密码
查看>>
Kali Linux 2017中Scapy运行bug解决
查看>>
Python监控进程性能数据并画图保存为PDF文档
查看>>