摘要:译自<<iPhone Game Development>> O’Reilly 第2章为了解决“如何在IPHONE上创建一个游戏”这个大问题,我们需要首先解决诸如“如何显示图像”与“如何播放声音”等一系列小问题。这些问题关系到创建部分游戏引擎。就像人类的身体一样,游戏引擎的每个部分虽然不同,但是却都不可或缺。因此,首先从游戏引擎剖析开始本章。我们将会讨论一个游戏引擎的所有主要部分,包括应用程序框架、状态机、图像引擎、物理引擎、声音引擎、玩家输入和游戏逻辑。 写一个好玩的游戏是一项牵扯到很多代码的大任务。非常有必要从一开始就对项目进行良好的,有组织的设计,而不是随着进度的进
阅读全文
摘要:1. 字符串常量NSString *s = @"test";NSLog(@"s:%lx",[s retainCount]); //ffffffffffffffff(即UINT_MAX ( Maximum value an `unsigned int'))因为"test"为字符串常量,系统不会收回,也不会对其作引用计数,即使我们对s如何retain或release。2. stringWithFormatNSString *s = [NSString stringWithFormat:@"%s", "
阅读全文
摘要:今天在园子里看到了一篇牛文“Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针”,讲得十分精彩,忍不住把它的代码加上注释整理于此,以便日后查看。个人体会:obj-C中的“Class类型变量”比c#中的Object基类还要灵活,可以用它生成任何类型的实例(但是它又不是NSObject)。而选择器SEL与函数指针IMP,如果非要跟c#扯上关系的话,这二个结合起来,就点类似c#中的反射+委托,可以根据一个方法名称字符串,直接调用方法。"牛"的基类 Cattle.h#import <Foun
阅读全文
摘要:obj-c本质就是"改进过的c语言",大家都知道c语言是没有垃圾回收(GC)机制的(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此对于iOS平台的程序员来讲,这个几乎没啥用),所以在obj-c中写程序时,对于资源的释放得由开发人员手动处理,相对要费心一些。引用计数这是一种古老但有效的内存管理方式。每个对象(特指:类的实例)内部都有一个retainCount的引用计数,对象刚被创建时,retainCount为1,可以手动调用retain方法使retainCount+1,同样也可以手动调用release方法使retainCount-1,调用rele
阅读全文
摘要:程序员编程艺术第一~二十七章集锦与总结(教你如何编程)作者:July、编程艺术室出处:结构之法算法之道blog一、引言 自从去年7月份朋友花明月黯帮我制作了十三个经典算法研究的PDF文档之后,我便一直希望能有人再帮我制作我的另一个系列:程序员编程艺术的PDF文档,而就在本月3日,朋友吴超帮我完成了这一工作。当时,便立马在微博上分享出来,很快,便有超过600人次朋友转发,直至今日,已有近1000名朋友得到了此PDF。 而后我意识到,尽管我很不喜欢一些不劳而获者,但我也不愿去让我的读者朋友们去做一些繁琐的点击,转发,进群等动作。故,既然要分享,那就把无限分享惠及天下做到极致吧,以省去诸...
阅读全文
摘要:1. Duplicated Code(重复的代码)臭味行列中首当其冲的就是Duplicated Code。如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。最单纯的Duplicated Code就是[同一个class内的两个函数含有相同表达式(expression)]。这时候你需要做的就是采用Extract Method提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。另一种常见情况就是[两个互为兄弟(sibling)的subclasses内含有相同表达式]。要避免这种情况,只需要对两个classes都使用Extract Method,然
阅读全文
摘要:在cocoa application的应用中,我们有时会使用Core Foundation(CF),我们经常会在Objective-C和CF之间进行转化。系统使用arc的状态下,编译器不能自动管理CF的内存,这时候你必须使用CFRetain和CFRelease来进行CF的内存的管理。具体的CF内存管理规则见:Memory Management Programming Guide for Core Foundation在OC和FC之间进行转化的时候,主要是对象的归属问题。共有两种方式:1、使用宏,可以标识归属者从OC到CF,还是从CF到OC。NS_INLINE CFTypeRef CFBridg
阅读全文
摘要:There are a number of data types in the Core Foundation framework and the Foundation framework that can be used interchangeably. This capability, calledtoll-free bridging, means that you can use the same data type as the parameter to a Core Foundation function call or as the receiver of an Objective
阅读全文
摘要:There is a really great book more than worth reading byJoshua BlochcalledEffective Java, Programming Language Guide(Pearson Education Inc, Addison-Wesley) which states in 57 items rules to good Java programming.Rumors say that the inventors of Java where inspired by some ideas of early Objective-C a
阅读全文
摘要:采用静态或者全局变量的实现方案由于C++不能保证静态或者全局对象的构造函数的调用顺序以及析构顺序。所以如果程序中有多个用此方法实现的Singleton类,它们之间又有某种构造依赖关系和析构依赖关系,就会造成灾难性的后果。所以,只有当肯定不会有构造和析构依赖关系的情况下,这种实现才是合适的。>优点实现简单,多线程下安全>缺点如果有多个Singleton对象的创建顺序有依赖时,千万别用;不是lazy loading,有些浪费。Meyers Singleton来控制构造顺序,但是不能控制析构顺序Scott Meyer在<<Effective C++>>3rd It
阅读全文
摘要:NSXMLParser 实现的是sax方法解析xml文件。dom实现的原理是把整个xml文档一次性读出,放在一个树型结构里。在需要的时候,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。sax的实现方法和dom不同。他只在xml文档中查找特定条件的内容,并且只提取需要的内容。这样做占用内存小,灵活,正好满足我们的需求。他的缺点就是写,有些资料介绍了写入的方法,但是我感觉这对本例没有必要。运行NSXMLParser涉及设置、运行和响应结果。1)启动NSXMLParser要使用NSXMLPars
阅读全文
摘要:对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。所以学习多线程编程最重要的不是学习API,而是理解什么才是多线程安全的代码从例子说起#include<windows.h>#include<process.h>longglobal1=0;volatilelongglobal2=0;classMyClass{public: MyClass() : m(0) {++m; }intfun(intv) {returnm+v;//-----------9 }voidset(intv) { m=v;//-----
阅读全文
摘要:#include <iostream>
#include <vector>
#include <bitset>
#include <assert.h>
#include <Windows.h>
#include <process.h> using namespace std; class CSingleton
{
private: class CAssistForSingleton { private: CRITICAL_SECTION m_cs; public: CAssistForSingleton() ...
阅读全文
摘要:iOS开发架构封装异步请求案例实现是本文要介绍的内容,主要是实现iOS开发中异步请求的封装案例,来看本文详细内容讲解。在找iOS开发相关的内容是,看到本文,与朋友们分享一下。论坛里看到一位兄台的问题:”异步请求能不能封装成一个公用的类?每个页面都要copy一下几个方法,感觉很麻烦“可能很多人也会有相同的问题,于是起一篇博客专门谈谈这个问题,主要想阐述一下编程思想及架构设计,权当抛砖引玉。闲话不多说,直接上代码://MyURLClass.h #import<Foundation/Foundation.h> @interfaceMyURLClass:NSObject{ @private
阅读全文
摘要:今天和大家分享的是桥接模式。在介绍桥接模式之前先和大家分享一个原则,那就是合成/聚合复用原则,具体定义是这样的:合成/聚合复用原则(CAPP),尽量使用合成/聚合,尽量不要使用类继承。合成(Composition,也有翻译成组合)和聚合(Aggregation)都是关联的特殊种类。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。打个比方说,小鸟有两个翅膀,翅膀与小鸟是部分和整体的关系,并且它们的生命周期是相同的,于是翅膀和小鸟就是合成关系。然而相对于鸟群来说,一个鸟群有
阅读全文
摘要:Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notification种类,本地和远程。本地的Notification由iOS下NotificationManager统一管理,只需要将封装好的本地Notification对象加入到系统Notification管理机制队列中,系统会在指定的时间激发将本地Notification,应用只需设计好处理Notification的方法就完成了整个Notification流程了。本地Notification所使用的对象是UI
阅读全文
摘要:本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2012/04/jdk-8-milestone-release-dates近日,Oracle在jdk8-dev邮件列表中宣布了JDK 8的里程碑与发布日期以寻求大家的评审与反馈。Oracle JDK的发布经理Mathias Axelsson针对JDK 8的开发里程碑提出了如下日程: M1: 2012年4月24日 M2: 2012年6月14日 M3: 2012年7月30日 M4:2012年9月11日 M5: 2012年11月26日 M6: 2013年...
阅读全文
摘要:KVC运用了一个isa-swizzling技术。isa-swizzling就是类型混合指针机制。KVC主要通过isa- swizzling,来实现其内部查找定位的。isa指针,如其名称所指,(就是is a kind of的意思),指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的方法的指针,和其它数据。比如说如下的一行KVC的代码:[site setValue:@"sitename" forKey:@"name"];就会被编译器处理成:SEL sel = sel_get_uid ("setValue:forKey:");IM
阅读全文
摘要:iPhone开发之UISearchBar学习是本文要学习的内容,主要介绍了UISearchBar的使用,不多说,我们先来看详细内容。关于UISearchBar的一些问题。1、修改UISearchBar的背景颜色UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField. 要IB中没有直接操作背景的属性。方法是直接将 UISearchBarBackGround移去seachBar=[[UISearchBaralloc]init]; seachBar.backgroundColor=[UIColorclearColor];
阅读全文
摘要:之前很多网友对我翻译的教程中的Property的使用感到有些迷惑不解,搞不清楚什么时候要release,什么时候要self.xxx = nil;同时对于Objective-c的内存管理以及cocos2d的内存管理规则不够清楚。本文主要讲解objc里面@property,它是什么,它有什么用,atomic,nonatomic,readonly,readwrite,assign,retain,copy,getter,setter这些关键字有什么用,什么时候使用它们。至于Objc的内存管理和cocos2d的内存管理部分,接下来,我会翻译Ray的3篇教程,那里面再和大家详细讨论。今天我们的主要任务是.
阅读全文
摘要:一:确认网络环境3G/WIFI1. 添加源文件和framework开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的。Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:1.1. 添加源文件:在你的程序中使用Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图: 1.2.添加framework:将SystemConfiguration.framework 添
阅读全文
摘要:先举一个例子:假如"我"的本职工作之一是“接电话”,但"我"发现太忙了或来电太杂了,于是我聘请一位"秘书"分担我“接电话”的工作,如果电话是老板打来的,就让“秘书”将电话转接给“我”。。。那么,“我”就是A Object.“秘书”就是"我"的“Delegate”。写成代码就是 -- [我 setDelegate:秘书];delegate的概念出现与mvc(model-view-controller),protocol,单线继承 密切相关The main value of delegation is that it
阅读全文
摘要:这是转载的一篇文章。1、当你对某件事情抱着百分之一万的相信,它最后就会变成事实。2、期望定律 期望定律告诉我们,当我们怀着对某件事情非常强烈期望的时候,我们所期望的事物就会出现。3、情绪定律 情绪定律告诉我们,人百分之百是情绪化的。即使有人说某人很理性,其实当这个人很有"理性"地思考问题的时候,也是受到他当时情绪状态的影响,"理性地思考"本身也是一种情绪状态。所以人百分之百是情绪化的动物,而且任何时候的决定都是情绪化的决定。4、因果定律 任何事情的发生,都有其必然的原因。有因才有果。换句话说,当你看到任何现象的时候,你不用觉得不可理解或者奇怪,因为任何事
阅读全文