IOS类目、延展、代理协议

本文探讨了Objective-C与Swift两种编程语言在iOS开发领域的应用与区别,介绍了它们各自的特点、优势以及在实际项目中的使用场景。Objective-C作为iOS早期的主要开发语言,至今仍有一席之地;而Swift则以其简洁、安全、高性能的特点,逐渐成为主流选择。本文旨在帮助开发者理解这两种语言的优劣,并在合适的情况下做出选择。
一.类目也称为分类
1.可以为已知的类添加方法,哪怕是你没有源码的类
2.通过类目添加方法会称为原始类的一部分
3.与原类中的方法同级
4.而且会被子类继承

类目的用处
1.可以扩展别人的类,可以座位子类的替代方式。
2.把同一个类的代码放到多个文件中,便于多人协作
 
注意
1.不能在类目中添加 实例变量
2.可以为同一类添加多个类目,蛋类目名和方法名不能城府
3.不能随意重写类的方法

下面我么来看具体的代码

类目.h文件
#import
//类目  在类目中不能添加实例变量
@interface NSString (CSayHi)
-(void)sayHi;//类目的方法

@end

类目.m文件
#import "NSString+CSayHi.h"

@implementation NSString (CSayHi)
-(void)sayHi{//类目方法的实现
    NSLog(@"这是类目提供的方法,字符内容是%@",self);
}
@end


main函数
#import
#import "NSString+CSayHi.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *str=@"hello";//定义一个字符串对象并赋值
        [str sayHi];//调用类目方法
       
       
       
    }
    return 0;
}
二延展
1.延展是一种特殊形式的类目
2.延展中定义的方法在类本身中实现

作用
定义私有方法

注意

延展不写类目名时,表示严重中定义的方法必须实现
如果提供了类目名称,则可以选择性实现

下面来看具体代码
类的.m文件
#import "Student.h"
//延展写在.m文件上
//延展不提供名称表示方法必须实现,提供名称可以不实现
//延展是定义私有方法
@interface Student(sayHi)
-(void)sayHi;//延展的声明
@end

@implementation Student
@synthesize name;
-(void)sayHi{//延展的实现
    NSLog(@"%@打招呼",self.name);
}
-(void)say{
    [self sayHi];
}
@end

main函数
        Student *stu=[[Student alloc]init];
        stu.name=@"小白";
       
        [stu say];//调用方法
三  协议
协议就是一套标准
协议只声明了方法,不具体实现,接受协议的对象负责实现
oc的协议由@protocol声明的一组方法列表
要求其他的类去实现,相当@interface部分的声明
@protocol   协议名称
@end

确认协议
定义的协议必须要被某些类实现
类中需要shiixan协议中定义的方法
此过程称为确认协议
@interface 类名:父亲名<协议名称,协议名二.....>
@end
注意
确认协议时应实现协议中@required修饰的方法
可以选择性实现@opyional
使用[对象 conformsToProtocol:@protocol(SalerProtocol)]判断是否遵循协议
代理模式
即本身不做实际的事情,而要求其他人去做
@property(assign,nonatomic)id<协议名>delegate

看实际代码 我们要求一个学生对服务员制定一个协议

学生类的.h文件

//首先我们创建一个学生的类
#import <Foundation/Foundation.h>

//学生的协议内容的声明
@protocol roomServer <NSObject>

@required//必须要实现的
-(void)check;//结账声明
@optional//不是必须要实现的
-(void)tackClothes;//拿衣服
@end

@interface Student : NSObject
@property(assign,nonatomic)id<roomServer> delegate;//声明属性代理()该属性遵守roomServer协议//
-(void)serve;//声明方法
@end

学生类的.m文件
#import "Student.h"

@implementation Student
@synthesize delegate;
-(void)serve{
    //使用if委托给的对象是否遵守了协议
    if ([self.delegate conformsToProtocol:@protocol(roomServer)]) {
        [self.delegate check];//服务员类的一个(代理)对象调用代理方法
        [self.delegate tackClothes];
    }
}
//制定一个服务员的类,需要服务员去遵守学生定的协议
服务员.h
#import <Foundation/Foundation.h>
#import "Student.h"
@interface Waiter : NSObject <roomServer>//把学生的协议引进

@end
服务员的.m文件
学生定的协议要由服务员来施行
#import "Waiter.h"

@implementation Waiter
-(void)check
{
    NSLog(@"我给您结账");
}
-(void)tackClothes
{
    NSLog(@"我给您拿衣服");
}
@end


main文件
#import <Foundation/Foundation.h>
#import "Student.h"
#import "Waiter.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
       
        Student *stu=[[Student alloc]init];//给Student的stu对象开辟空间并赋初值       
        Waiter *wa=[[Waiter alloc]init];//非Waiter的wa对象开辟空间并赋初值
        stu.delegate=wa;//因为要用stu对象的代理去执行学生对服务员协议的方法
        [stu serve];
    }
    return 0;
}
参考文章:http://www.cnblogs.com/sgdkg/p/3142647.html 
http://blog.sina.com.cn/s/blog_b6e3f37101019evl.html
http://www.cnblogs.com/jy578154186/archive/2013/02/27/2934789.html
Java是一种具备卓越性能与广泛平台适应性的高级程序设计语言,最初由Sun Microsystems(现属Oracle公司)的James Gosling及其团队于1995年正式发布。该语言在设计上追求简洁性、稳定性、可移植性以及并发处理能力,同时具备动态执行特性。其核心特征与显著优点可归纳如下: **平台无关性**:遵循“一次编写,随处运行”的理念,Java编写的程序能够在多种操作系统与硬件环境中执行,无需针对不同平台进行修改。这一特性主要依赖于Java虚拟机(JVM)的实现,JVM作为程序与底层系统之间的中间层,负责解释并执行编译后的字节码。 **面向对象范式**:Java全面贯彻面向对象的设计原则,提供对封装、继承、多态等机制的完整支持。这种设计方式有助于构建结构清晰、模块独立的代码,提升软件的可维护性与扩展性。 **并发编程支持**:语言层面集成了多线程处理能力,允许开发者构建能够同时执行多项任务的应用程序。这一特性尤其适用于需要高并发处理的场景,例如服务器端软件、网络服务及大规模分布式系统。 **自动内存管理**:通过内置的垃圾回收机制,Java运行时环境能够自动识别并释放不再使用的对象所占用的内存空间。这不仅降低了开发者在内存管理方面的工作负担,也有效减少了因手动管理内存可能引发的内存泄漏问题。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值