类的扩展

来源:互联网 发布:淘宝如何修改发货地 编辑:程序博客网 时间:2024/04/30 03:28

//1.类目 Category

//命名 : @interface 要扩展的类名 (类目名) ~~ @end

//特点 :  1.不可定义成员变量,而且一般不定义属性

@interface NSString (SayBaby)

-(void)sayHello;

-(NSString *)reverse;

-(NSString *)substringFromIndex:(NSUInteger)from;

@end


另外,虽然Category不能够为类添加新的成员变量,但是Category包含类的所有成员变量,即使是@private的。Category可以重新定义新方法,也可以override继承过来的方法 

--------------------

到NSString+SayBaby.m中去实现方法

#import "NSString+SayBaby.h"


@implementation NSString (SayBaby)


-(void)dealloc{

    [superdealloc];

}

-(id)init{

   self = [superinit];

   if (self) {

        

    }

    return self;

}

-(NSString *)substringFromIndex:(NSUInteger)from{

   NSLog(@"%s",__func__);

   return @"ok";

}

-(void)sayHello{

   NSLog(@"%s",__func__);//打印出方法名

    NSLog(@"self = %@",self);

 }

_________________________________________________________

//2.延展 Extension

//命名 : 写在.m文件里 @interface 类名 () ~~ @end

//特点 : 1.添加类的私有属性和方法;


#import "Gril.h"

//延展(Extension):添加私有方法与成员变量,属性

//延展的括号中没有内容,如果添加内容,即类目

@interface Gril ()

{

   NSInteger _age;

}

@property(nonatomic,assign)NSInteger age;

-(void)doNotAskAge;

@end


@implementation Gril

-(void)dealloc{

    [_namerelease];

    [_sexrelease];

    [superdealloc];

}

-(id)init{

   self = [superinit];

   if (self) {

       self.age = 18;

        [selfdoNotAskAge];

    }

    return self;

}

-(void)doNotAskAge{

   NSLog(@"不要问");

}

@end


--------

#import <Foundation/Foundation.h>


@interface Gril : NSObject

@property(nonatomic,retain)NSString *name;

@property(nonatomic,retain)NSString *sex;

@end

____________________________________________________________

//3.协议 Protocol:实现类与类之间的通信

//命名 : @protocol 协议名 <NSObject> ~~ @end

//      @required 不写是默认的,必须实现 @optional可实现可不实现

//特点 : 1.只声明,不实现

//      2.为了解决多继承问题

//      3.@property (nonatomic, assign) id<协议名> delegate;

//       为啥用assign 为了防止循环拥有释放不了





    
0 0
原创粉丝点击