1. [Tips]NSTimer对Target的强引用

    NSTimer对Target的强引用

    这是一个老坑,虽然app发生错误后经过一些调试很快定位到NSTimer,还是觉得有必要记录下。

    + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo
    

    其中,API文档中清楚地解释到:

    The object to which to send the message specified by aSelector when the timer fires. The timer maintains a strong reference to target until it (the timer) is ...

    Tagged as : objc iOS
  2. 限制文本输入长度

    需求

    限制字符输入长度是个常见的需求,比如注册的账号或者密码。通常,从用户体验的角度,iOS App中当输入超过制定长度的字符时不需要显式的弹出提示,而只需要让超过的字符不显示即可。这个功能看似简单,但是考虑到一些输入系统例如中文输入法的联想功能,就不那么简单。

    一般的实现

    以UITextField为例,通常的做法是在delegate中做文章。这样的解决方案很多,stackflow上一个比较全面的解答:Set the maximum character length of a UITextField,大致的思路就是在输入即将要替换的时候,计算最终要显示的字符串。这个方法对于英文输入是没有问题的,但是对于其他语言如中文输入就会存在问题。举例来说中文拼音输入“的”时,用户需要输入de,在未选中“的”时,de以选中的状态在输入框中显示,并作为输入框的内容,如下图:

    input1input2

    按照中文的输入法,de两个字符并不是最终显示在UITextField控件中,所以背景有选中区域,但此时UITextFiled的属性text的内容包含de。然后,右图显示的是输入“的”后产生的联想,注意此时点击“确 ...

    Tagged as : objc
  3. NSZombierEnable

    今天在cocoachina上看到一篇关于实现NSZombier的翻译贴,原文来自Mike Ash。此人是(Friday Q&A)的作者,更为神奇的是他白天是飞行员,晚上是程序员,这在天朝不可想像。本文主要是基于他以下两篇文章的笔记。
    Friday Q&A 2011-05-20: The Inner Life of Zombies
    Friday Q&A 2014-11-07: Let's Build NSZombie

    启用NSZombier对象

    有经验的开发者在遇到诸如EXC_BAD_ACCESS的错误时往往会设置NSZombieEnabledYES,这样类似的错误发生后,就可以定位到出错的位置,从而便于诊断问题所在。
    诸如此类的内存错误不管是MRC还是ARC下,都是会发生的。发生的原因在于:一个已经release的指针对象,又收到了某个消息,这时就会发生古怪。在MRC下,alloc一个对象A,然后release后,该对象所指向的内存被系统回收 ...

    Tagged as : objc

Page 1 / 1