随笔分类 - 13.C/Objective-C
摘要:先承认我是标题党,因为在obj-c的世界中,官方根本没有"接口"与"泛型"这样的说法。 不过在obj-c中有二个与之接近的概念"非正式协议(interface)"与"正式协议(protocol)"。非正式协议在obj-c中的关键字虽然也是interface,但是这个跟c#中的接口(interface
阅读全文
摘要:今天在园子里看到了一篇牛文“Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针 ”,讲得十分精彩,忍不住把它的代码加上注释整理于此,以便日后查看。个人体会:obj-C中的“Class类型变量”比c#中的Object基类还要灵活,可以用它生成任何类型的实例(但是它又不是NSObject)。而选择器SEL与函数指针IMP,如果非要跟c#扯上关系的话,这二个结合起来,就点类似c#中的反射+委托,可以根据一个方法名称字符串,直接调用方法。"牛"的基类 Cattle.h#import <Fou
阅读全文
摘要:C#中可以通过反射分析元数据来解决这个问题,示例代码如下:using System;using System.Reflection;namespace Hello{ class Program { static void Main(string[] args) { if (IsMethodDefined(typeof(Utils), "HelloWorld")) { Console.WriteLine("Utils类中有方法HelloWorld"); } else { Console.WriteLine("Utils类中没有方法HelloWor
阅读全文
摘要:在c#中要扩展一个现有类很容易,比如这样: public static class Utils { public static void PrintToConsole(this string strSrc) { Console.WriteLine(strSrc); } }这样就为String类添加了一个PrintToConsole的方法,使用方法如下: class MainClass { public static void Main (string[] args) { "Hello World!".PrintToConsole(); } }在objective-C中,也有
阅读全文
摘要:今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择呢?区别:1、initWithFormat是实例方法只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 调用,但是必须手动release来释放内存资源2、stringWithFormat是类方法可以直接用 NSString* str = [NSString stringWithFormat:@&qu
阅读全文
摘要:注:这是《Objective-C基础教程》一书上的实例,但是原书限于篇幅,分析得比较简单,初次阅读看得比较费劲,这里展开详细讨论一下。场景:有二个类Car和Engine,即“汽车”和“引擎”。先来看最初的版本:Engine.h#import @interface Engine : NSObject@property int flag;@end // EngineEngine.m#import "Engine.h"@implementation Engine@synthesize flag;- (NSString *) description{ return ([NSStri
阅读全文
摘要:如果一个对象的生命周期显而易见,很容易就知道什么时候该new一个对象,什么时候不再需要使用,这种情况下,直接用手动的retain和release来判定其生死足矣。但是有些时候,想知道某个对象在什么时候不再使用并不那么容易。如果下面的代码,看上去非常简单:Sample.h类接口部分#import < Foundation / Foundation.h >@interface Sample : NSObject {}-(NSString*) toString;@endSample.m 类实现部分#import "Sample.h"@implementation Sa
阅读全文
摘要:obj-c本质就是"改进过的c语言",大家都知道c语言是没有垃圾回收(GC)机制的(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此对于iOS平台的程序员来讲,这个几乎没啥用),所以在obj-c中写程序时,对于资源的释放得由开发人员手动处理,相对要费心一些。引用计数这是一种古老但有效的内存管理方式。每个对象(特指:类的实例)内部都有一个retainCount的引用计数,对象刚被创建时,retainCount为1,可以手动调用retain方法使retainCount+1,同样也可以手动调用release方法使retainCount-1,调用rele
阅读全文
摘要:先来定义一个Human父类定义部分:注:+(void)前的加号,就表示这一个是类方法(static 方法),而-(void)表示这是一个实例方法实现部分:注意:下面的 -(id) init 即为构造函数。对应的,还有一个-(void)dealloc方法用来释放资源(类似于析构函数或c#中的dispose()方法)-注:dealloc方法以后在内存管理中详细学习,这里先不管它。再来定义一个Woman子类定义部分:实现部分:注意下面的:setMarried 与 Married 就是obj-C中属性的标准写法(当然以后还能看到其它简化的写法)main方法中的调用:运行结果:2011-02-09 17
阅读全文
摘要:上一篇展示了如何用传统的“面向过程编程方法”,实现画“矩形”、“圆”、“椭圆”,这一篇看下如何改用OOP的方法来实现:因为要用到“颜色”以及“矩形区域”二个枚举,先把他们抽出来单独放在CommDef.h文件中然后再定义基类Shape,注意:在obj-C中,定义一个类通常分成二部分,一部分是".h"的文件,用来申明类有哪些成员(也称为类的定
阅读全文
摘要:上一篇中,所有代码都是放在同一个文件main.h中的,这显然不是一个好的方式,代码多了以后,看着就头大。可以将其进行拆分:1、将所有枚举、结构的定义单独放在一个文件ShapeDef.h中2、将所有方法都放在另一个文件ShapeMethod.h中3、最后在主文件Main.m中使用ShapeMethod.h注:ShapeDef.h,ShapeMethod.h,Main.m三个文件均处于同一个项目的同一个目录中。
阅读全文
摘要:Console窗口的运行结果:2011-01-25 13:49:05.978 HelloWorld[734:a0f] drawing a circle at (0,0,10,30) in red2011-01-25 13:49:06.016 HelloWorld[734:a0f] drawing a rectangle at (30,40,50,60) in green2011-01-25 13:49:06.018 HelloWorld[734:a0f] drawing an egg at (15,18,37,39) in blue
阅读全文
摘要:从雨痕老大的博客上转来的 http://www.rainsts.net/article.asp?id=1066读书人偷书不算窃 :)1. 文件CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + SHIFT + W: 关闭文件2. 编辑CMD + [: 左缩进CMD + ]: 右缩进CMD + CTRL + LEFT: 折叠CMD + CTRL + RIGHT: 取消折叠CMD + CTRL + TOP: 折叠全部函数CMD + CTRL + BOTTOM: 取消
阅读全文
摘要:虽然c有很多经典的开发环境,但是大多数是linux或unix下的,对于windows的忠实用户来讲,可能并不习惯。windows环境中,有一个dev-c++可以做c代码的调试,但这个软件貌似已经停止更新了,而且个人觉得它也不够时尚,有点过时了。所以windows平台中,我更倾向于推荐eclipse环境1、下载Eclipse IDE for C/C++ Developers地址:http://www.eclipse.org/downloads/ 或 http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/helios
阅读全文
摘要:买不起iPhone4,只能弄了一台iTouch4,想尝试一下iOS上的开发,虽然有monoTouch可用,但是这东西要399美金授权,换成RMB好几千块了,算了,为了省钱,还是老老实实复习C 吧,然后升级到Objective-C。1.1 在你自己的系统中运行“hello, world”程序。再有意去掉程序中的部分内容,看看会得到什么出错信息。1.2 做个实验,当printf 函数的参数字符串中包含\c(其中c 是上面的转义字符序列中未曾列出的某一个字符)时,观察一下会出现什么情况。1.3 修改温度转换程序,使之能在转换表的顶部打印一个标题。1.4 编写一个程序打印摄氏温度转换为相应华氏温度的转
阅读全文