「 iOS知识小集 」2018 · 第 40 期

栏目: IOS · 发布时间: 7年前

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

作者:ibabyblue_z

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 “截屏”

作者:halohily

想为某个 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);
复制代码

覆盖父类同名属性

作者:Vong_HUST

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

@protocol VVLTextViewDelegate;

@interface VVLTextView : UITextView

// warning1: Property type 'id<VVLTextViewDelegate>' is incompatible with type 'id<UITextViewDelegate> _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<VVLTextViewDelegate> delegate;

@end

@protocol VVLTextViewDelegate <UITextViewDelegate>
- (void)test;
@end

@implementation VVLTextView

@end
复制代码

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

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

@protocol VVLTextViewDelegate <UITextViewDelegate>
- (void)test;
@end

@interface VVLTextView : UITextView
@property (nonatomic, weak) id<VVLTextViewDelegate> delegate;
@end

@implementation VVLTextView
@dynamic delegate;

@end
复制代码

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

特别推荐

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

7 期的内容清单如下:

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

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


以上所述就是小编给大家介绍的《「 iOS知识小集 」2018 · 第 40 期》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithms with JavaScript

Data Structures and Algorithms with JavaScript

Michael McMillan / O'Reilly Media / 2014-2-22 / USD 28.51

If you’re using JavaScript on the server-side, you need to implement classic data structures that conventional object-oriented programs (such as C# and Java) provide. This practical book shows you how......一起来看看 《Data Structures and Algorithms with JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试