OC自学笔记—2

 

  一、OC内存管理

我们先回忆一下C语言的内存管理,在C语言中,如果申请了两个指针同时指向同一块内存,一旦其中一个指针把这个内存释放了,那么其他指针就会变成野指针从而造成内存泄露。

OC语言中,每个对象都有一个retainCount计数器,用来记录当前被引用的次数,被引用会+1,释放就会-1,直到为0时自动调用dealloc函数释放内存。从而避免了内存泄露的情况。

二、Object-C  Category

  这几天都在看OC中关于protocolCategory的内容,简单的理解protocol是在为一些类提供公用的接口,他做出了一系列的定义但他不负责具体的实现。

 Category则不一样,他能为一个功能齐全的类再添加额外的接口和定义,是对已有类的补充。打个比喻就像我们玩组装高达喜欢给他们装上不同的武器去完成不同的任务,这非常有面向对象的特点。

ProtocolCategory都和我们熟悉的C语言中继承有所区别,我觉得虽然C语言中继承拥有两者的特点,但个人觉得继承对父类的依赖性太大,使用继承时不仅要对父类有足够的了解,而且当父类和继承都比较庞大的时候,处理起来将会比较麻烦,这是我以前在做一些开发时得到的体会。

 Category还有个功能就是让message私有化,OC中很多方法都是public的,通过Category可以实现私有化。Category能把一个类的实现分为若干不同文件中,每个Category其实都是类的一部分,要注意的是Category只能拓展消息但不能拓展字段,这和C的继承也有很大的区别

  下面我引用一段代码尝试地去应用Category,这里我们为函数库里的NSSstring拓展了一个将string翻转输出的功能:

// NSString+ReverseString.h

#import <Foundation/Foundation.h>

@interface NSString (ReverseString)

-(id)reverseString;

@end

 

// NSString+ReverseString.m//

#import"NSString+ReverseString.h"

@implementation NSString (ReverseString)

 

-(id)reverseString

{

   

   NSUInteger len=[self length];                                                                       //NSUinteger是无符号的整型,NSinteger是有符号的整型

   //selg表示字符串本身

   NSMutableString *retStr=[NSMutableString stringWithCapacity:len];     

//NSMutableStringNSString的子类,NSString声明的字符串是不可变的,而NSMutableString声明的字符串是可变的

 

   while(len>0)//长度大于0

    {

       unichar c=[self characterAtIndex:--len];

       //从后取一个字符unicode

       NSLog(@"c is %C",c);

       NSString *s=[NSString stringWithFormat:@"%c",c];

       [retStr appendString:s];

    }

   return retStr;

}

@end

 

 

//

//  main.m

#import <Foundation/Foundation.h>

#import"NSString+ReverseString.h"

int main(int argc, const char * argv[])

{

 

   @autoreleasepool {

       

       // insert code here...

       NSLog(@"Hello, World!");

       NSString *string=@"Hello";

       NSString *retString=[string reverseString];

       NSLog(@"ret string is %@",retString);

       

    }

   return 0;

}

//输出结果:olleH

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值