1.内存管理
? ? ? ? 概念,当alloc出一个对象,其构成为 对象自身+retainCount ,这个retainCount是对象计数器 。判断对象要不要回收的唯一依据(存在一种例外:对象值为nil时,引用计数为0,但不回收 空间)就是计数器是否为0,若不为0则存在。对象被销毁前会给系统发送dealloc,当然可以重写此函数。dealloc不能直接调用,如果意见被回收过的对象再次使用会报野指针(Zombie)。在diagnostics中可以开启Zombie监测。
? ? ? ? Objective-C??供了三种内存管理方式:MannulReference Counting(MRC,手动管理,在开发 iOS4.1之前的版本的项目时我们要 自己负责使用引用计数来管理内存,比如要手动 retain、release、autorelease 等,而在其后 的版本可以使用 ARC,让系统自己管理内存。) automatic reference counting(ARC,自动引用计数,iOS4.1 之后推出的) garbage collection(垃圾回收)。iOS不支持垃圾回收; ARC作为苹果新??供的技术,苹果推荐开发者使用ARC技术来管理内存;
? ? ? ? 想要手动调用retain,release必须关闭ARC . 在build setting中可以设置。
? ? ? ??
? ? ? ? 官方强烈建议不需要手动托管资源计数与释放,那便略过。ARC不是垃圾回收,是编译器特性不是运行时特性。ARC判定是否回收的规则,至少有一个强指针指向对象就不会执行回收。
?
2.Category 和 C#exten class差不多,都是在不更改当前类的前提下,新增类扩展当前类的api 。
3.神奇的block,apple推荐使用的数据类型。使用场景广泛,用来保存一段代码恰当的时机调用。
[email protected] 协议,这东西与C#的abstract保持一致,其实没什么好说的。其中有两个关键字 @required 必须实现此方法; @optional 可以选择不实现;众所周知接口可以多继承oc也不例外。
5.代码 暂时就那么多吧,后面再接着写
#import <Foundation/Foundation.h>
?
//声明一个协议也就是c#中的接口
@protocol IprototolTest
?
@required -(void)ShowTxt :(NSString*) str;
@optional -(void)ShowTxtNoParams;
?
@end
?
@interface TestClass:NSObject <IprototolTest>
{
? ? @public
? ? int name;
}
-(void) PrintName:(NSString*) name;
?
@end
?
?
@implementation TestClass
?
-(void)PrintName:(NSString *)name
{
? ? NSLog(name);
}
?
-(void)ShowTxt:(NSString *)str
{
? ? NSLog(str);
}
?
@end
?
@interface TestClass (testCategory)
-(void)SayHello;
@end
@implementation TestClass(testCategory)
?
-(void)SayHello
{
? ? NSLog(@"helloworld");
}
?
@end
?
?
?
void (^testBlockMethod)(int, NSString*) = ^ (int x, NSString* y)
{
? ? NSLog(@"%d +++++ %@", x , y);
};
?
int main(int argc, const char * argv[]) {
? ? @autoreleasepool {
? ? ? ? TestClass *s = [[TestClass alloc] init];
? ? ? ? [s SayHello];
?? ? ? ?
? ? ? ? testBlockMethod(1001,@"testBlock ...");
?? ? ? ?
? ? }
? ? return 0;
}