「 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 期》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

《裂变:秒懂人工智能的基础课》

《裂变:秒懂人工智能的基础课》

王天一 / 电子工业出版社·博文视点 / 2018-6-13 / 59.00元

人工智能是指通过普通计算机程序实现的人类智能技术,这一学科不仅具有非凡的科学意义,对人类自身生存方式的影响也在不断加深。本书作为人工智能领域的入门读物,内容围绕人工智能的核心框架展开,具体包括数学基础知识、机器学习算法、人工神经网络原理、深度学习方法与实例、深度学习之外的人工智能和实践应用场景等模块。本书力图为人工智能初学者提供关于这一领域的全面认识,也为进一步的深入研究建立坚实的基础。一起来看看 《《裂变:秒懂人工智能的基础课》》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

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

正则表达式在线测试