类定义,方法,数据,继承 03 | @interface f1 : NSOBject |
24 | class f1 : public CPPObject |
Objective-C中的实现范围在@implementation/@end 标记 (在 C++ 中我们可以将实现放在任何带有::范围操作符的地方)之中. 它使用@class关键字用于事先声明. Objective-C 默认带有 私有(private) 保护, 但仅用于数据成员(方法必须是公共的). Objective-C 使用 self 而不是 this ,并且它还可以通过super关键字调用它的父类. 构造器和析构器
02 | NSObject* s = [NSObject alloc] init]; |
06 | CPPObject* ptr = new CPPObject(); |
10 | NSObject* s = [NSObject alloc] initwitharg: 4 ]; |
14 | CPPOBject* ptr = new CPPOBject( 4 ); |
Objective-C中的内存分配是通过静态成员方法alloc来实现的,所有 (做为NSObject后裔)的对象都有这个方法. self 在Objective-C中是可以被赋值的,而如果构建失败的话它就会设置成nil(而在C++中则会被抛出一个异常). 内存分配之后实际被构造器调用的是一个公共的成员函数,在Objective-C中默认的是init方法.
Objective-C 使用同COM益阳的引用计数方法, 而它也使用 retain 和 release (等同于IUnknown的 AddRef() 和 Release() 方法). 当引用计数到了0,则对象会从内存中被移除掉.
多线程 02 | @interface f1 : NSOBject |
06 | - ( void ) threadfunc :(NSInteger*) param; |
13 | - ( void ) threadfunc : (NSInteger*) param |
15 | [self performSelectorOnMainThread: @selector (mt)]; |
24 | [self performSelectorInBackground: @selector (thradfunc:) withObject: 1 waitUntilDone: false ]; |
Objective-C 有一些针对NSObject的内建功能,可以在另外一个线程中操作一个选择器 (== 调用一个成员), 在主线程中,等待一次调用等等 . 在NSObject 参见更多信息. 内存和ARC 2 | @interface f1 : NSObject |
5 | @property (weak) NSAnotherObject* f2; |
5 | NSObject* s = [NSObject alloc] init]; |
这里需要你忘记自己良好的 C++ 习惯. OK Objective-C 使用了一个垃圾收集机制,这种东西我们C++很讨厌,因为它很慢并会让我们想到Java. 但是 ARC (自动进行引用计算) 是一种 编译时间 特性,它会告诉编译器 "这里是我的对象:请帮我算算啥时候它们才要被销毁吧". 使用ARC你就不需要发送 retain/release 消息给你的对象了; 编译器会自动帮你代劳的.
为了能帮助编译器决定保留一个对象多长时间,你还要一个弱引用指向一个变量. 默认的,所有的变量都是强引用(==只要强引用还存在,被引用的对象就会存在下去) . 你也可以获取一个弱引用,它会随着每个强引用消失而失去它的值. 这在类成员从XCode的Builder Interface(像RC 编辑器)处获取它们的值时,会很有用,当类被销毁时,那些成员也会失去它们的值. Strings 2 | NSString* s1 = @ "hello" ; |
3 | NSString* s2 = [NSString stringWithUTF8String: "A C String" ]; |
4 | sprintf(buff, "%s hello to %@" , "there" ,s2); |
5 | const char * s3 = [s2 UTF8String]; |
NSString 是一个Objective-C字符串的不可变表示. 你可以使用其一个静态方法,或者是一个带有@前缀的字符串文本来创建NSString. 你也可以使用 %@ 来向printf家族函数来表示一个NSString,
|