Skip to content
Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?

Objective-C

2014-03-31
31 March
On March 31, 2014
In Data Structures(数据结构), English Posts(英文写作), Language Tips(语言初试), Mobile Development(移动开发)

Introduction to Loc (Lua Objective-C)

Recently we were starting to use Lua in our game. Lua is a very popular scripting language in the game industry. It’s written in pure C and is very lightweight. We can simply add Lua source code to our project, and it is very easy to compile and run.

However, in practice we encountered issues with type conversion between Lua and Objective-C. In the beginning, we followed instructions to create C functions, and inside the functions we called Objective-C methods, then registered those functions into Lua State as library. When requirements went more complicated, we have to create a bunch of C functions, which are redundancy in a lot of places. This is really not an ideal to bridge between Lua and Objective-C.

After reading the Lua instructions for two days, and with knowledge about iOS7 JavaScript Framework, I decided to create a similar framework to handle type conversion between these two languages. The good thing is Objective-C is a superclass of C, and Lua is naturally compiled from C, this makes it very easy to construct a bridge and make them communicating with each other. With reflection from Objective-C, it’s also very convenient to call Objective-C methods from Lua.

Loc (Lua Objective-C) is the framework I created to convert type between Lua and Objective-C for our project. It’s as simple as Lua, with only 6 packages. It reduces a lot of time to create functions mapping Lua call, and it works pretty well so far.

With the permission from my company, I shared the slides that I presented to my colleagues about the design and syntax about Loc. I am trying to persuade my managers to make it open source, so more developers could use it to prove the usability and make the framework more mature.

2013-11-04
04 November
On November 4, 2013
In Data Structures(数据结构), Knowledge Base(心得笔库), Language Tips(语言初试), Mobile Development(移动开发)

JavaScriptCore框架在iOS7中的对象交互和管理

之前一篇的文章中已经简单入门了iOS7中新加的JavaScriptCore框架的基本用法,十分的简单方便而且高效,不过也仅限于数值型、布尔型、字符串、数组等这些基础类型。本文将扩展到更复杂的类型,介绍一下该强大的框架是如何让Objective-C对象和JavaScript对象进行直接互通的。

为了方便起见,以下所有代码中的JSContext对象都会添加如下的log方法和eventHandler:

[codesyntax lang=”objc” lines=”normal”]

JSContext *context = [[JSContext alloc] init];
context.exceptionHandler = ^(JSContext *con, JSValue *exception) {
    NSLog(@"%@", exception);
    con.exception = exception;
};

context[@"log"] = ^() {
    NSArray *args = [JSContext currentArguments];
    for (id obj in args) {
        NSLog(@"%@",obj);
    }
};

[/codesyntax]
Read More →

2013-10-05
05 October
On October 5, 2013
In Design Patterns(设计模式), Language Tips(语言初试), Mobile Development(移动开发)

iOS7新JavaScriptCore框架入门介绍

前阵子,Apple正式发布了新的iOS 7系统,最大最直观的改变在于界面变得小清新范了,我也提到《iOS,你真的越来越像Android了》。不过对于移动开发者来说,除了要适应Xcode 5,最应该关注的还是iOS 7在开发接口的上的变化。概览Apple提供的官方文档《What’s New in iOS》,最最让我欣喜的是iOS 7中加入了JavaScriptCore框架。该框架让Objective-C和JavaScript代码直接的交互变得更加的简单方便。

JavaScriptCore

这个框架其实只是基于webkit中以C/C++实现的JavaScriptCore的一个包装,在旧版本iOS开发中,很多开发者也会自行将webkit的库引入项目编译使用。不过虽然iOS7把它当成了标准库,可惜目前,我还没有在Apple Developer中找到像之前文章中收集的那样的官方文档介绍这个框架的具体使用方法。

好在还可以在Xcode中找到头文件,而且里面的注释对每个类和方法的功能写得还算清楚,再结合网上仅有的几篇文章的介绍,我也在此简单入门一下JavaScriptCore。更多细节还待开发过程中发现。
Read More →

2013-02-28
28 February
On February 28, 2013
In Article Collection(聚宝收藏), Mobile Development(移动开发)

iOS开发官方文档汇总

程序员的学习过程是无止境的,程序员学习的途径是多样的。可以从视频教程中领悟,也可以从他人的代码中理解。但当我们专注于某一个平台在开发的时候,对于某个API使用或者功能实现有疑问,通常简单的测试可以让我们知道可能的效果,异或网上搜索一下别人的经验,不过最好的途径应该还是阅读官方的文档解释。常常可以更全面,具体的了解。当然也不排除有时候官方文档说了跟没说似地,或者根本说得文不对题。

半年多里一直从事Mobile游戏的开发,Android和iOS平台都有接触,不过还是以iOS为主,为了解决问题也查阅了不少的文档资料。就像以前学.NET一定会去MSDN,iOS上的问题就会先去查阅Apple Developer。总得感觉Library的文档还是MSDN做得比较好,说明详细例子也比较多。而Apple Developer上对于API的注释都不够详细,而且没有例子告之该如何使用。

apple-pdf不过Apple的文档也有它独有的好处,比如绝大部分的文档都有相应的PDF格式文件提供下载,对于离线阅读十分的方便,而且还可以在PDF做一些相应的笔记,针对某几页进行打印等等。

另外,Apple还会给出该API所对应的框架结构使用的文档,其中会有一些代码例子。但是其实那些例子依然不够,还是需要到其它地方寻找。但是这些讲述结构的文档却是体现出API设计的来源,所以十分值得阅读,只是需要花时间了理解和消化。Read More →

2013-01-16
16 January
On January 16, 2013
In Article Collection(聚宝收藏)

一些视频教程网站推荐

程序员是一个艰苦的职业,因为作为程序员总是要取追逐和学习日新月异的各种编程语言和技术,而也正是因为这样才让程序员的自学能力往往强于其它从事其它职业的人员。程序员的会从各种渠道获得学习资源,包括书籍、博客、论坛、社区、搜索、交流。还有一种重要的途径就是通过视频来学习。

计算机方面的视频教程很多,视频有着类似课堂教学的感觉,又在一些方面优于课堂教学:可以暂停、回放、加速,可以参照着一起动手编写代码。唯一的缺点可能就是无法提问和互动,对于冒出的想法和问题不能得到即时的反馈 (不过大学里有多少人上课会提问呢)。

视频教程对程序员帮助很大,但是好的视频教程在网上流传似乎都太分散,这加大了观看的难度也不利于互相分享学习。所以我在这里收集了一些比较好内容比较丰富的在线视频教程的网站,可以方便大家挑选学习。另外这些网站上的视频大部分都可以下载,方面放在电脑、手机、平板上随时随地观看学习。

这些网站上的视频都是系列型的,要看完一个系列还是需要花些时间。当然用来对已知知识进行复习也是不错的。对于每个网站我也会推荐一些我在上边看过的视频教程系列。
Read More →

2012-10-26
26 October
On October 26, 2012
In Design Patterns(设计模式), Language Tips(语言初试)

Objective-C简单对象关系映射(ORM)结构

用+(void)load对全局变量初始化,实际上并不是一个非常好应用,因为大多情况下我们并不需要使用全局变量。但是另一方面,我们倒是可以通过+(void)load来实现对象关系映射(Object-relational mapping, ORM)的结构。

首先我们要定义一个ORM类,它含有Dictionary成员。这个Dictionary用来保存我们要用来映射对象所属类的名字(作为key)和类本身(作为value)。
Read More →

2012-10-26
26 October
On October 26, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

使用Objective-C的+(void)load初始化全局变量

《Objective C类方法load和initialize的区别》里,我介绍了+(void)initialize和+(void)load两个方法在编译和执行时出现的区别,又通过《使用Objective-C的+(void)initialize初始化static变量》一文简单介绍了+(void)initialize可以用在对静态变量的初始化上。

如同《使用Objective-C的+(void)initialize初始化static变量》中介绍的那样,假如Objective-C的全局变量被限定为static,只用在当前文档中,那么使用+(void)initialize来进行初始化是非常合适而且正确的。如果类并未被使用,该变量就不会被赋予对象也就不会浪费内存空间。但是假如我们就是希望用全局变量在程序任何地方使用,那么+(void)initialize可能就不那么有效了。因为变量可能在相应类的方法被调用前就使用,即是说+(void)initialize并未被调用对全局变量进行初始化。
Read More →

2012-10-23
23 October
On October 23, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

使用Objective-C的+(void)initialize初始化static变量

在《Objective C类方法load和initialize的区别》一文中,我介绍了Objective-C对待+(void)initialize和+(void)load两个方法在编译和执行时出现的不同。而这些不同也是在使用时应该非常注意的地方。不过文章里面我没有讲这两个方法在Objective-C中究竟有什么实用价值。

其实+(void)initialize可以视为C#,Java中的静态构造函数。有了这个方法,我们就不用像C++自己另找途径来设计静态构造函数了。不过Objective-C中又有一些很不同的地方,因为Objective-C里不能把数据成员限定为static或者const。也就是说,虽然Objective-C可以定义类方法,但是类不能有数据成员。所以也不存在静态数据成员初始化的问题。

不过作为C语言的超集,Objective-C依然可以沿用C的一些特点了定义static的全局变量来作为类静态成员。
Read More →

2012-09-29
29 September
On September 29, 2012
In Knowledge Base(心得笔库), Language Tips(语言初试)

Objective C类方法load和initialize的区别

过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method)。它们的特别之处,在于iOS会在运行期提前并且自动调用这两个方法,而且很多对于类方法的规则(比如继承,类别(Category))都有不同的处理。

而因为这两个方法是在程序运行一开始就被调用的方法,我们可以利用他们在类被使用前,做一些预处理工作。比如我碰到的就是让类自动将自身类名保存到一个NSDictionary中。

Read More →

Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.