Lmsgsendnilself

Uninhibited Soul, Free Craziness

Load&initialize

| Comments

Tip:load和initialize方法

1 都会在实例化对象之前调用,
2 以int main(int argc, char * argv[])函数为分水岭,前者在main函数之前调用,后者在之后调用。
3 这两个方法会被自动调用,不能手动调用它们。

maskToBounds离屏渲染的解决

| Comments

GPU渲染机制:

CPU计算好显示内容提交到GPU,GPU渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。

渲染类型:

当前屏幕渲染:GPU的渲染在当前用于显示的屏幕缓冲区中进行操作。

iOS自动化打包脚本

| Comments

  最近自己在做新项目,利用空余时间研究写了下自动化打包脚本,打包需要两个文件的配置,一个是打包脚本文件,另一个则是打相应包所需配置plist文件。

以打ad-hoc包为例,ad-hoc.plist配置如下

跨平台开发尝试

| Comments

  今天简单聊一下两种跨平台开发引擎调研的优缺点。

RoboVM

  它是一个VM,它能够将Java的字节码翻译成ARM或者X86平台的原生代码。 由于RoboVM自带支持Java到Object-C的bridge,我们可以使用RoboVM作为中间媒介,借助一系列Java到Objective-C绑定机制,来实现对硬件以及原生iOS API的全覆盖访问。
  优点: RoboVM就像LLVM的前端,将Java字节码翻译成为LLVM位码,接着,生成的LLVM位码被LLVM后端优化并翻译成机器码,LLVM支持所有不同类型的CPU架构与操作系统方案。

Synthesize

| Comments

what

关键字@synthesize的作用是对成员变量及其getter和setter的合成。如果不写,默认为@syntheszie var = _var;

how

对于@synthesize,如果开发者没有实现setter和getter方法时,编译器会自动合成这两个方法,如果代码中了,就会用代码实现的。

isKindOf&isMemberOf

| Comments

在objc工程的NSObject.mm文件里面关于这两个方法的定义如下:可以看出加入对[NSObject class],返回的是类对象而非元类。

UIWebview与JS混编优化

| Comments

  在我们开发过程中,UIWebview与JS交互是经常要遇到的事情。这种方式可以达到代码在Android和iOS两端复用,降低开发成本,其劣势当然是以牺牲一定的原生展示效果为代价。例如对于之前开发的编辑器,其富文本定制就是通过对UIWebview注入大量的JS个性化定制实现的。网上关于Webview和JS交互的基本普及贴详细的很多,在此也不做赘述,简单描述下。

自定义UIWebview的user-agent

| Comments

注册 user-agent

1
2
3
4
5
6
7
8
- (void)registerUserAgent {
    UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectZero] ;
    NSString *oldAgent = [webview stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSString *appendAgent = [NSString stringWithFormat:@" %@/%@ (%@)", APP_NAME,APP_BUILD_VERSION, PLATFORM_NAME];
    NSString *newAgent = [oldAgent stringByAppendingString:appendAgent];
    NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
}