tripleCC's Blog


  • 首页

  • 归档

  • 标签

  • 关于

更加快速地设置Frame

发表于 2016-04-23 | 分类于 objective-c |

由于现在手头上的项目是基于frame开发的,没有xib或者storyboard,没有使用自动布局,所以排布界面时总是显得很繁琐。

令人蛋疼的frame布局

老代码对界面的坐标尺寸设置都是通过下面的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
UIView * mainView = [[UIView alloc] initWithFrame:CGRectMake(0, self.height, self.width, MAIN_HEIGHT)];
[mainView setBackgroundColor:[UIColor whiteColor]];
[self addSubview:mainView];
self.mainView = mainView;

UIView * opertionMenu = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, 45)];
[opertionMenu setBackgroundColor:[UIColor whiteColor]];
[mainView addSubview:opertionMenu];

UIView * line = [[UIView alloc] initWithFrame:CGRectMake(0, 44, self.width, 1)];
[line setBackgroundColor:[UIColor colorWithHex:0xe9e9e9]];
[opertionMenu addSubview:line];
...

这些坐标设置工作都是在初始化,也就是init系列方法中完成的。这样做的弊端很明显,复用性很差,如果还是按照这种方式的话,每扩展一种界面类型,就要新增一个init方法。久而久之,冗余代码会越来越多,新增特性想重用这块控件的话,需要做比较多的无用功。

阅读全文 »

SDWebImage设置大尺寸图片崩溃问题

发表于 2016-03-17 | 分类于 ios |

昨天产品在teambition上提了一个bug:点击特定的页面app闪退。

我很是纳闷,因为通过其它类型索引进入的详情页面都不会出现这样的情况,为什么偏偏是这个页面?还是因为memory warning而闪退?而且内存不是慢慢增加,而是从80M左右激增到600M+

接着我查看了进入这个页面时获取的json,仔细观察后,发现并没有特别的地方。于是我决定使用instruments的Allocations查看到底是什么操作占用了如此庞大的内存。

进入界面之后,展示的界面如下图:

阅读全文 »

iOS知识碎片五

发表于 2016-03-09 | 分类于 碎片系列 |

1、iOS中文斜体

2、Swift中替代#ifdef以及关于Target管理

3、UIRefreshControl下拉抖动

4、聊天界面输入框换行抖动

5、UITapGestureRecognizer与tableView:didSelectRowAtIndexPath:

阅读全文 »

关于keychain封装库Locksmith

发表于 2016-02-05 | 分类于 swift |

Locksmith是一个面向协议编程的keychain封装库,也是我见过的对面向协议贯彻最彻底的一个第三方库。

Locksmith基本实现

iOS系统中有5种keychain类型:generic passwords, internet passwords, certificates, keys,以及 identities。并且针对每个类型都有4种操作:create, read, update,以及 delete。

对于以上复杂的逻辑关系,Cocoa采用了一系列字符串常量以及对应的key/value进行操作。只是对于Swift来说,这种方式过于冗余而且难以记忆,并没有充分利用到其语言特性。

Locksmith作者采用了protocol来解决原生方案过于复杂的问题。就像乐高玩具一样,可以随意组装不同的组件来达到不同的视觉效果,Locksmith可以让使用者遵守特定的protocol来获取对应的功能,比如需要delete功能,那么就遵循DeleteableSecureStorable协议;需要read功能,那么就遵守ReadableSecureStorable协议。而在对应的模型中,不需要额外添加函数,协议内部通过extension已经实现了对应的功能函数。开发者直接调用deleteFromKeychain或者readFromKeychain即可实现想要的功能。

阅读全文 »

iOS知识碎片四

发表于 2016-02-02 | 分类于 碎片系列 |

1、显示CoreData执行的SQL语句

2、监听UITextView键盘的发送按钮

3、设置CoreData实体唯一约束

4、iOS9关于canOpenURL不生效

5、OC变参函数

阅读全文 »

工具速查博客

发表于 2016-01-14 | 分类于 blog |

准备在这里记录一些常用开发工具的介绍博客,以备忘。

阅读全文 »

在Ubuntu下编译Swift

发表于 2016-01-05 | 分类于 swift |

哎,近半年没有在Ubuntu的字符终端下畅爽地码代码了(那种Ctrl+Alt+F1~F6然后只有不同颜色的字符在屏幕上跳跃的感觉现在想起来还是超爽啊!),今天恰好来试下在Ubuntu下编译Swift,因为要截图,所以只能在图形界面的虚拟终端下码了- -。

下载工具包

首先需要进这这里下载对应的工具包,因为我的系统是去年安装的Ubuntu14.04所以选择最后一个。


解压工具包

然后进入下载文件夹解压:



可以看到解压后,目录下有下面几个子目录:



主要说明三个子目录

1
2
3
bin   可执行文件
lib 可执行文件动态库
share man

阅读全文 »

Swift2.0中的case匹配

发表于 2015-12-29 | 分类于 swift |

Swift在2.0版本之后,对if、guard、for的匹配进行了一定的加强,其中case匹配模式感觉还是挺新奇的。

参照Swift官方手册,可以知道,这种模式在针对可选值进行处理时,可以获得额外的便利:

1
2
3
4
5
6
7
8
9
10
let someOptional: Int? = 42
// Match using an enumeration case pattern
if case .Some(let x) = someOptional {
print(x)
}

// Match using an optional pattern
if case let x? = someOptional {
print(x)
}

x?是.Some(let x)的简写方式。单从以上代码段,可能还看不出有什么特别之处,相反还比以前的实现繁琐:

1
2
3
if let x = someOptional {
print(x)
}

不过官方手册体现其便利的是for关键字,if还需要另一种场景来体现其带来的便利:

1
2
3
4
5
6
7
8
9
10
let arrayOfOptionalInts: [Int?] = [nil, 2, 3, nil, 5]
// Match only non-nil values
for case let number? in arrayOfOptionalInts {
print("Found a \(number)")
}

// 输出
// Found a 2
// Found a 3
// Found a 5

可以看到,在遍历可选值数组的场景下,这种方式确实减少了一些代码,要是以前,我可能会这样实现:

阅读全文 »

用Swift实现Struct归档

发表于 2015-12-24 | 分类于 swift |
1
2
3
4
struct AboutMe {
var detail: String
var links: [[String : String]]
}

在Swift中,Struct类型是无法进行归档操作的,只有继承自NSObject并且遵守了NSCoding协议的类才可以进行相应的归档操作。也就是将上面结构体改成类:

1
2
3
4
5
6
7
8
9
10
11
12
class AboutMe: NSObject, NSCoding {
var detail: String
var links: [[String : String]]
required init?(coder aDecoder: NSCoder) {
aDecoder.decodeObjectForKey("detail")
aDecoder.decodeObjectForKey("links")
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(detail)
aCoder.encodeObject(links)
}
}

但是如果要对Struct进行归档,可以转换思维,使用按照以下步骤实现。

阅读全文 »

Xcode快捷键

发表于 2015-12-20 | 分类于 xcode |
  • command + shift + o 快速定位文件
  • command + shift + y 隐藏下方debug框
  • command + shift + c 聚焦下方debug框
  • command + option + 0 右方工具框
  • command + 0 左方工具框
  • command + option + [ 代码上调
  • command + [ 代码左调
  • shift + commad + j 将文件目录切换到打开的文件
  • control + 1 选中要查看的方法名,按下快捷键后,点击celler,可以查看哪些方法调用了此方法
  • esc 枚举显示自动补全
  • command + d storyboard中复制拷贝控件
  • option + shift 可以移动仿真器中的手指
  • control + i = control + [ 代码对齐
  • option + 单击文件 文件显示在辅助窗口
  • control + shift + 左击 显示IB中所有控件
  • command + shift + option + 左/右 隐藏/显示方法内容
    阅读全文 »
1…4567
tripleCC

tripleCC

ʕ•̫͡•ʔ-̫͡-ʕ•͓͡•ʔ-̫͡-ʕ•̫͡•ʔ-̫͡-ʕ•͓͡•ʔ-̫͡-ʔ

68 日志
18 分类
63 标签
GitHub 简书 Twitter StackOverflow E-Mail
© 2021 tripleCC
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4