OC学习之进阶

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中可以设置。

        NewImage

        官方强烈建议不需要手动托管资源计数与释放,那便略过。ARC不是垃圾回收,是编译器特性不是运行时特性。ARC判定是否回收的规则,至少有一个强指针指向对象就不会执行回收。

 

2.Category 和 C#exten class差不多,都是在不更改当前类的前提下,新增类扩展当前类的api 。

3.神奇的block,apple推荐使用的数据类型。使用场景广泛,用来保存一段代码恰当的时机调用。

4.@protocol 协议,这东西与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;

}

posted @ 2015-11-13 14:14  keyle_xiao  阅读(317)  评论(0编辑  收藏  举报