浮生猎趣

ls *.fun >> 罗列一切乐趣

到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

| Comments

Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发、异步任务。但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block。因为在 ObjC 中,直接调用一个实例变量,会被编译器处理成 ‘self->theVar’,’self’ 是一个 strong 类型的变量,引用计数会加 1,于是,self retains queue, queue retains block,block retains self。

Xcode 6.1 iPhone Simulator 8.1 Keyboard Issue:键盘无法显示,设置inputAccessoryView崩溃

| Comments

随着iPhone 6 & Plus的发布,苹果也陆续更新了XCode和开发模拟器,目前最新的Xcode版本是6.1,内置的Simulator的iOS版本是8.1。也许你兴致冲冲迫不及待地一下子升级到了最新版的开发环境,那么可能会遇到一些键盘上的问题:无法弹出键盘,或者弹出键盘后会莫名其妙地崩溃。

当然,不能怪你,你的项目在iOS7.1上是运行地好好的。只能怪苹果没有推出一个完美无Bug的开发工具。

iOS AutoLayout与AutoSizing:自动布局,想说爱你真的好难

| Comments

在iPhone Retina发布之前,还没有AutoLayout,因为屏幕只有一种尺寸。
当iPhone Retina发布之后,我没有用上AutoLayout,因为屏幕尺寸是用点来表示,布局写起来没什么不同。
当iPhone 5发布之后,屏幕尺寸终于加长了,但是由于有AutoSizing,所以我还是可以不用AutoLayout。
现在,iPhone 6和6 Plus发布了,屏幕又大了,我不得不开始考虑是否要使用AutoLayout。

iOS通过宏定义快速调整View的Frame

| Comments

在iOS开发中,经常需要在运行时动态修改View Frame,比如,theView的X坐标右移2个点,Y坐标下移2个点,常用的方法如下:

1
2
3
4
    CGRect newFrame = self.theView.frame;
    newFrame.origin.x += 2;
    newFrame.origin.y += 2;
    self.theView.frame = newFrame;

逻辑很简单,就是代码繁琐了点,设想一下,假如有5个以上的子View需要调整位置与大小……