类目
分两部分:
1.系统已经写好的类目:按照功能对系统的类方法进行区分.
类目从@interface开始,后面是当前类名字,类名后是分类的功能, 到@end结束.
2.我们创建的类目,一般是为了把系统的类进行扩充.
对系统的类(例:NSString)添加文件Objective-C File {File:StringMethod; File Type:Category; Class: NSString}后,会自动出现@interface NSString (StringMethod).文件名为:NSString+StringMethod.
@interface NSString (StringMethod)
@end
延展
为自己写的类添加类目.
延展以@interface开头,然后写当前延展的类名,类名后加一个(),到@end结束.
一般延展会写在自己写的类的.m文件中,把一些不想让外部调用的属性放在延展里,这样这条属性就只能在类的内部使用,外部使用不了,尽最大可能保护当前类的安全.
类目一般都是看不见.m的系统文件进行扩展,延展一般是针对自己的类进行操作.
类的.m文件:
// 这其中的name属性和create方法只能在自己类中使用.
@interface Student ()
@property(nonatomic, copy)NSString *name;
@end
@implementation Student
- (void)create{
_name = @"你好";
NSLog(@"%@",_name);
}
@end
协议
- 在类的.m中声明协议@protocol,协议名为 类名+Delegate ,然后写协议内容(分 必须实行(@required)和选择实行(@optional));
#import <Foundation/Foundation.h>
// 1.声明一份协议
//@protocol 协议关键词
@protocol Marry <NSObject>
// 协议内容:
// 协议方法的声明:分两种
//若未写明@.... 则是必须实现的方法.
// @optional 是可选择的
@required
- (void)earnMoney;
@optional
- (void)cook;
@end
- 设置代理人属性:
在@interface …… : NSObject 中写
@property(nonatomic, assign)id <协议名>delegate;
// 写触发方法.
@interface Girl : NSObject
// 2.设置代理人的属性
@property(nonatomic,assign)id<Marry>delegate;
// 触发方法
- (void)getMarry;
@end
- 在类的.m中写代理人需要执行的内容.
#import "Girl.h"
@implementation Girl
//两个人结婚之后,协议才正式的生效.
- (void)getMarry
{
//3. 让代理人去执行协议里的方法.
[self.delegate earnMoney];
}
@end
- 在代理人.h中先引头文件,然后签订协议. NSObject<协议名>;
#import <Foundation/Foundation.h>
#import "Girl.h"
//4.引完头文件之后,boy需要签订协议
@interface Boy : NSObject<Marry>
@end
- 在main.m中确定代理人
#import <Foundation/Foundation.h>
#import "Boy.h"
#import "Girl.h"
int main(int argc, const char * argv[]) {
// 创建两个小人
Boy *boy = [[Boy alloc] init];
Girl *girl = [[Girl alloc] init];
// 5.设置代理人
girl.delegate = boy;
//7. 通过调用结婚的方法,来执行协议里的方法.
[girl getMarry];
return 0;
}
- 在代理人.m中写协议中需要实施的方法内容.
#import "Boy.h"
@implementation Boy
//6.实现协议方法earnMoney
- (void)earnMoney{
NSLog(@"买买买");
}
@end
// 触发.
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-08-26 05:59:35