//1.类目 Category
//命名 : @interface 要扩展的类名 (类目名) ~~ @end
//特点 : 1.不可定义成员变量,而且一般不定义属性
@interface NSString (SayBaby)
-(void)sayHello;
-(NSString *)reverse;
-(NSString *)substringFromIndex:(NSUInteger)from;
@end
--------------------
到NSString+SayBaby.m中去实现方法
#import "NSString+SayBaby.h"
@implementation NSString (SayBaby)
-(void)dealloc{
[super dealloc];
}
-(id)init{
self = [super init];
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{
[_name release];
[_sex release];
[super dealloc];
}
-(id)init{
self = [super init];
if (self) {
self.age = 18;
[self doNotAskAge];
}
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 为了防止循环拥有释放不了