iOS Extension Category Protrol 例子理解

本文介绍了Objective-C中的Category、Protocol以及如何使用Runtime实现类扩展,讨论了Extension与Protocol的区别,以及如何在Person类中使用它们定义属性和方法。同时提到了一份全面的Web前端学习资源,包含HTML面试题和学习资料。
摘要由CSDN通过智能技术生成

//

// Person.h

// ExtensionCateGoryProtrolDemo

//

// Created by apple on 2017/12/14.

// Copyright © 2017年 ZY. All rights reserved.

//

#import <Foundation/Foundation.h>

#import “Study.h”

@interface Person : NSObject

@end

//

// Person.m

// ExtensionCateGoryProtrolDemo

//

// Created by apple on 2017/12/14.

// Copyright © 2017年 ZY. All rights reserved.

//

#import “Person.h”

#import <objc/runtime.h>

//这也是类扩展

@interface Person ()

@property(nonatomic,assign) int age;

@end

@implementation Person

-(void)logAge{

self.age = 18;

NSLog(@“%d”,self.age);

}

-(void)Eat{

NSLog(@“Eat”);

}

-(void)Study{

NSLog(@“Study”);

}

-(void)setFriendName:(NSString *)name{

objc_setAssociatedObject(self, @“friendName”, name,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

-(NSString *)friendName{

return objc_getAssociatedObject(self, @“friendName”);

}

@end

Category用runtime方法实现了可以设置属性:

//

// Person+Run.h

// ExtensionCateGoryProtrolDemo

//

// Created by apple on 2017/12/14.

// Copyright © 2017年 ZY. All rights reserved.

//

#import “Person.h”

@interface Person (Run)

@property(nonatomic,strong)NSString * name;

-(void)Run;

@end

//

// Person+Run.m

// ExtensionCateGoryProtrolDemo

//

// Created by apple on 2017/12/14.

// Copyright © 2017年 ZY. All rights reserved.

//

#import “Person+Run.h”

#import <objc/runtime.h>

@implementation Person (Run)

-(void)Run{

NSLog(@“Run”);

}

-(void)setName:(NSString *)name{

objc_setAssociatedObject(self, @“name”, name,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

-(NSString *)name{

return objc_getAssociatedObject(self, @“name”);

}

@end

单独的Extension文件相当于一个需要自己实现的Category(本例子已经在Person类实现):

//

// Person+Eat.h

// ExtensionCateGoryProtrolDemo

//

// Created by apple on 2017/12/14.

// Copyright © 2017年 ZY. All rights reserved.

//

#import “Person.h”

@interface Person ()

@property(nonatomic,copy)NSString * friendName;

-(void)logAge;

-(void)Eat;

@end

Protocol和Extension一样需要别人实现,我理解的区别是Extension必须要你扩展的类实现,而protocol谁遵守协议谁实现:

//

// Study.h

// ExtensionCateGoryProtrolDemo

//

// Created by apple on 2017/12/14.

// Copyright © 2017年 ZY. All rights reserved.

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

给大家分享一些关于HTML的面试题,有需要的朋友可以戳这里免费领取,先到先得哦。


zBA0wLg-1713496061510)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-ZKwkn6GJ-1713496061510)]

最后

给大家分享一些关于HTML的面试题,有需要的朋友可以戳这里免费领取,先到先得哦。

[外链图片转存中…(img-QyNaQofh-1713496061510)]
[外链图片转存中…(img-SLK8NQ6K-1713496061511)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值