240 发简信
IP属地:北京
  • 120
    iOS马甲包浅谈

    什么是马甲包 马甲包一般是主APP的分身或者克隆,也或者说是穿着马甲的一个APP,脱掉马甲,APP将呈现另一种样式,也就是常说的AB面APP。 1、主APP的分身或者克隆类型...

  • 120
    iOS触摸事件全家桶

    好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是已经被响应链、手势、target-action这一系列响应触...

  • 120
    从 Swift 初始化说起

    原文地址:http://huizhao.win/2016/11/13/swift-init/ 从 Objective-C 转到 Swift 后,可能首先就会发觉 Swift ...

  • Mdzz

    劝大家别搞网恋!

    事情是这样的,去年8月份结的婚,今天离了,才结婚一年左右,说说我的情况希望玩游戏的你们不要踩雷。我和她在一起玩了几个月王者,打双排啊玩各种模式啊这些都是在一起,每天都互相点外...

  • 120
    iOS 3D变换 -- CALayer的transform

    UIView的显示设置都是对CALayer属性的封装,但是这层封装掩盖了CALayer提供的3D显示功能。所以我们想让UIView显示3D的效果的话,需要直接操作CALaye...

  • 120
    [iOS]关于UISearchBar, 看这个就够了

    UISearchBar一般我们不单独使用他, 在iOS 8之后, 我们更多地是和UISearchController一起使用, 关于UISearchController的一些...

  • 【转】dart中extends、 implements、with的用法与区别

    原文链接[https://www.cnblogs.com/webcabana/p/11872265.html] 一、概述 继承(关键字 extends) 混入 mixins...

  • 我有个男性朋友,也是这样

    朋友的苦恼

    一个女性朋友,30多岁,却苦恼于和丈夫没有夫妻生活。她问我:“这种情况是不是需要治疗?” 我问她:“他生理上没问题吧?” 她说:“没问题,我们刚结婚的时候都挺好,生完孩子他就...

  • 感谢大佬的分享,对于以下这个,有些自己的见解
    “2.判断自己没有初始化过,所以就去找自己的父类Person类,看Person类有没有初始化过,发现Person类也没有初始化过,且Person类也没有父类,”
    我觉得这里不是说Person类没有父类,person的父类NSObject咋看Person类加载之前一定已经被初始化过了,而且当前代码中也没有为系统类NSObject的分类实现 + initialize方法(我们无法实现系统类的方法,只能在在其分类中实现),所以就回到检查Person的初始化以及+ initialize的实现情况

    Category的本质<二>load,initialize方法

    Category的本质<一>Category的本质<三>关联对象面试题1:Category中有load方法吗?load方法是什么时候调用?面试题2:load,initiali...

  • 120
    Category的本质<二>load,initialize方法

    Category的本质<一>Category的本质<三>关联对象面试题1:Category中有load方法吗?load方法是什么时候调用?面试题2:load,initiali...

  • 120
    GCD信号量-dispatch_semaphore_t

    1.GCD信号量简介 GCD信号量机制主要涉及到以下三个函数: dispatch_semaphore_create(long value);和GCD的group等用法一致,这...

  • NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

    _timer = [NSTimer scheduledTimerWithTimeInterval:TimerInterval
    target:self
    selector:@selector(timerSelector:)
    userInfo:nil
    repeats:TimerRepeats];

    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

    [_timer invalidate];

    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

    关于你用的这个例子和你的解释,我觉得有点不妥。你说ios系统会同时对NSTimer和viewController强调引用,所以当创建timer后,viewController的引用计数+1。但是在我看来,其实就是timer对viewController进行了强调应用,原因是因为,如果要让timer运行的时候执行viewController下面的timerSelector:,timer需要知道target,并且保存这个target,以便于在以后执行这个代码 [target performSelector:], 这里的target就是指viewController。所以,timer和viewController是相互强调引用的。 但是这样看起来,就形成了retain cycle。为了解除retain cycle,我觉得,在-(void)invalidate;这个方法下,timer之前保存的target被设置为nil,强制断开了引用环。这点和设置timer = nil是差不多的。 但是invalidate还做了另外一个动作,就是解除了runloop对timer的强调引用,使得timer成功停止。 一点点愚见,我也还在研究,希望相互学习。 :smile:

  • 120
    Swift底层探索:Optional

    在Optional.Swift源码中,Optional定义如下。 Optional是通过enum实现的,Optional本质是枚举。 有两个case,nil和some。 关联...

  • 120
    UITableView性能优化-中级篇

    老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如: Cell复用机制 Cell高度预先计算 缓存Cell高度 圆角切割 等等. . ...

  • 120
    iOS 优化ipa包,减小安装包大小

    项目打包之后.ipa包的大小是118.9M,上传到App Store后iPhone6s上显示85.5M,下载时间太长,所以找了一些优化方法,下面这些都是别人写的自己试了一下确...