十一月第四周

1.当前页面弹出支付宝付款码结账,请求接口付款成功,返回页面会提示支付成功,但是本来支付页面成功支付后面的操作不会走了,这个怎么解决?

使用根控制器的navigationController的push跳转。

UIApplication.shared.navigationController?.pushViewController(vc, animated: false)

2.生成高清二维码并添加logo:
http://www.cocoachina.com/ios/20181116/25492.html

3.小结weak和unowned:

个人总结两者的异同:

相同点:

weak和unowned都可以解决Reference Cycle,所以他们相同的地方:

都不会对object进行reference count(引用计数)加1的操作

都可以解决reference cycle这个问题(这句好像有点废)

不同点

weak修饰的属性,只能是变量(var),同时只能是Optional类型,因为在模拟实际情境中,这个属性有可能是没有具体值的。换言之你需要手动检查解包后才能使用——所以朝阳群众说这样更安全;

unowned修饰的属性,不能是Optional类型(一定是nonoptional类型),(想象一样,银行肯定要有了「客户」之后,才能制作该「客户」的「信用卡」);

weak属性,初始化后也可以为nil;

unowned属性,初始化后一定都有值;

weak比unowned更安全(原因见「不同点」第一条);

unowned比weak性能好一点点(出处——倒数第二段)

4.FPS检测界面卡顿:
理想的FPS值为60左右,过低的话就用该进性优化了,根据WWDC的说法,当FPS 低于45的时候,用户就会察觉到到滑动有卡顿。

下面用Swift封装了一个记录FPS检测的小控件:

//
//  HDLFPSLabel.swift
//  HaidilaoPad
//
//  Created by 彭思 on 2018/11/19.
//  Copyright © 2018年 HongHuoTai. All rights reserved.
//

import UIKit

class HDLFPSLabel: UILabel {
    private var _link :CADisplayLink?
    private var _count:Int = 0
    private var _lastTime:TimeInterval = 0
    private let _defaultSize = CGSize(width: 55, height: 20)
    
    override init(frame: CGRect) {
        
        var targetFrame = frame
        if frame.size.width == 0 && frame.size.height == 0{
            targetFrame.size = _defaultSize
        }
        super.init(frame: targetFrame)
        self.layer.cornerRadius = 5
        self.clipsToBounds = true
        self.textAlignment = .center
        self.isUserInteractionEnabled = false
        self.textColor = UIColor.white
        self.backgroundColor = UIColor(white: 0, alpha: 0.7)
        self.font = UIFont(name: "Menlo", size: 14)
        weak var weakSelf = self
        _link = CADisplayLink(target: weakSelf!, selector:#selector(tick(link:)));
        _link!.add(to: RunLoop.main, forMode:RunLoopMode.commonModes)
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    @objc func tick(link:CADisplayLink) {
        
        if _lastTime == 0 {
            _lastTime = link.timestamp
            return
        }
        _count += 1
        let delta = link.timestamp - _lastTime
        if delta < 1 {
            return
        }
        
        _lastTime = link.timestamp
        let fps = Double(_count) / delta
        _count = 0
        let progress = fps / 60.0;
        self.textColor = UIColor(hue: CGFloat(0.27 * ( progress - 0.2 )) , saturation: 1, brightness: 0.9, alpha: 1)
        self.text = "\(Int(fps+0.5))FPS"
    }
}

PS:在我的测试机上没有感觉卡顿,但是门店有人反映卡顿,大神们有没有什么好的解决办法呢?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8月8日,晴 今天要飞拉萨,感觉自己很淡定,可是在杭州城的最后一晚还是失眠了,辗转到凌晨三点才昏昏欲睡,但4...
    木棉宝贝阅读 3,008评论 0 0
  • 最近接触到了阿里云的函数计算的服务,经过几天的尝试还是有所收获,因此不妨把学习过程中的点滴记录下来,方便以后温习。...
    山林挽风阅读 7,878评论 0 0

友情链接更多精彩内容