摘要:
今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择呢?区别:1、initWithFormat是实例方法只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 调用,但是必须手动release来释放内存资源2、stringWithFormat是类方法可以直接用 NSString* str = [NSString stringWithFormat:@&qu 阅读全文
摘要:
今天在园子里看到了一篇牛文“Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针 ”,讲得十分精彩,忍不住把它的代码加上注释整理于此,以便日后查看。个人体会:obj-C中的“Class类型变量”比c#中的Object基类还要灵活,可以用它生成任何类型的实例(但是它又不是NSObject)。而选择器SEL与函数指针IMP,如果非要跟c#扯上关系的话,这二个结合起来,就点类似c#中的反射+委托,可以根据一个方法名称字符串,直接调用方法。"牛"的基类 Cattle.h#import <Fou 阅读全文
摘要:
非正式协议在obj-c中的关键字虽然也是interface,但是这个跟c#中的接口(interface)并不完全相同。回忆一下前面学过的内容,我们定义一个类Sample时,总是会先生成一个Sample.h,代码如下:#import <Foundation/Foundation.h>@interface Sample : NSObject {}-(void) HelloWorld;@end它表明Sample类中,约定了"应该"有一个名为HelloWorld的方法(注:我这里说的是应该,而不是必须),它只是一种君子协定。如果我们在Sample.m中,并不遵守这个约定 阅读全文
摘要:
注:这是《Objective-C基础教程》一书上的实例,但是原书限于篇幅,分析得比较简单,初次阅读看得比较费劲,这里展开详细讨论一下。场景:有二个类Car和Engine,即“汽车”和“引擎”。先来看最初的版本:Engine.h1 #import <Cocoa/Cocoa.h>2 3 @interface Engine : NSObject4 5 @property int flag;6 7 @end // EngineEngine.m 1#import "Engine.h" 2 3@implementation Engine 4 5@synthesize fla 阅读全文
摘要:
如果一个对象的生命周期显而易见,很容易就知道什么时候该new一个对象,什么时候不再需要使用,这种情况下,直接用手动的retain和release来判定其生死足矣。但是有些时候,想知道某个对象在什么时候不再使用并不那么容易。如果下面的代码,看上去非常简单:Sample.h类接口部分1 #import < Foundation/Foundation.h >2 @interface Sample : NSObject {3 4 }5 6 -(NSString*) toString;7 8 @endSample.m类实现部分 1 #import "Sample.h" 2 阅读全文
摘要:
obj-c本质就是"改进过的c语言",大家都知道c语言是没有垃圾回收(GC)机制的(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此对于iOS平台的程序员来讲,这个几乎没啥用),所以在obj-c中写程序时,对于资源的释放得由开发人员手动处理,相对要费心一些。引用计数这是一种古老但有效的内存管理方式。每个对象(特指:类的实例)内部都有一个retainCount的引用计数,对象刚被创建时,retainCount为1,可以手动调用retain方法使retainCount+1,同样也可以手动调用release方法使retainCount-1,调用rele 阅读全文