1). wkwebview中的iframe中发现iframe的cookie丢失,测试发现
- 钉钉app中打开不会丢失 ✅
- 微信中打开会丢失 ❎
- safari中同样丢失 ❎, 但设置中开启允许跨域追踪后,发现不会丢失 ✅
- iOS13上设置HTTPCookieStorage.shared.cookieAcceptPolicy = .always
发现不丢失?
2). lazy var
deinit 造成程序奔溃
- 例如deinit中调用未初始化的webview,webview设置已经销毁的controller为代理,可能造成野指针问题
- 可以添加标识,来表示懒加载的变量是否加载。(思考:是否有更优雅的方式)
3). 支付宝支付 AlipaySDK.defaultService()?.payOrder(..., fromScheme: .., callback: {}
中callback的回调,根据文档。 callback只在未安装支付宝app时进行回调。如果安装支付宝,则需要在func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
方法或者scen方法中进行处理(iOS9),可notification通知其他页面刷新。
4). block形式通知(Notification)的是否需要deinit中销毁。建议销毁
private var observer: Any?
self.observer = NotificationCenter.default.addObserver(forName: Notification.Name(rawValue: AppNotificationName.alipaySuccess.rawValue), object: nil, queue: OperationQueue.main) { (noti) in
}
NotificationCenter.default.removeObserver(observer)
5). 使用runtime绑定NSNumber类型的变量,如果用OBJC_ASSOCIATION_RETAIN
,32bit的设备会崩溃/-[CFNumber retain]: message sent to deallocated instance 0x16dc3350
。 需要使用OBJC_ASSOCIATION_RETAIN
,详情见运行时绑定NSNumber类型传参Crash
static const void *k_pop_tag = &k_pop_tag;
-(void)setJk_popTag:(NSInteger)popTag{
NSNumber *number = [[NSNumber alloc]initWithInteger:popTag];
objc_setAssociatedObject(self, k_pop_tag, number, OBJC_ASSOCIATION_RETAIN);
}
-(NSInteger)jk_popTag{
id o = objc_getAssociatedObject(self, k_pop_tag);
if (o) {
return [o integerValue];
}
return 0;
}
6). 某个view的frame转换到相对window的frame
let tgFrame = cell.convert(cell.bounds, to: nil)