第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

iOS 關(guān)于Category(類目),Extension(延展),Protocol(協(xié)議)

標(biāo)簽:
Go
概述

最近再看关于iOS的基础知识,突然发现经常用到的一些技术的有些模糊,所以在这里做下总结,方便以后查阅.

一. Category - 类目

Category 是比继承更为简洁的方法来对Class进行扩展,无需创建子类就可以为现有的类动态添加方法,可以是项目内任何已经存在的类,甚至那些没有源代码的类.(看不到.m 文件的类)

  • 类目的声明及实

 // 声明   
 @interface NSString (CjString)

  - (NSString *) cj_AppendingLength; @end

 // 实现
 @interface NSString (CjString)- (NSString *)cj_AppendingLength{      NSString *result = @"";      if (self) {
    
    result = [NSString stringWithFormat:@"%@ length is %ld", self, [self length]];
     }   return result;
  }@end
  • 调用/结果

注意
  • 类目声明的方法优先级高于原始类的方法,所以在命名类目的方法的名时,苹果官方建议在方法名的开头加上一个前缀.防止在命名时与原始类的方法名发生冲突

二. Extension - 延展

延展可以理解成是匿名的Category,可以用来给当前来添加属性和新方法,不作用在Subclass.只能对有implementation源代码的类写Extension,对于没有implementation源代码的类,比如framework class,是不可以的.

  • 延展
    @interface Person ()
    // 有没有好眼熟
    // 一般用来给类添加私有属性跟方法
    // 在Xcode升级之后,延展很少用,因为在implementatio的方法跟变量默认就是私有的
    // 在Xcode之前版本因为我们在C语言中在方法实现之前去调用的话,就必须要在之前声明一下
    @end

三. Protocol - 协议
  • 协议 是对外声明的一个方法列表,这些方法有必须去实现 也有可选去实现的.(@required必须实现,@optional可选实现) 对外提供的接口.

  • 委托 (传值) 协议也可以把自己想要做的事情委托给被人去处理,这样的方式可以实现传值的效果.

这里简单演示下委托(传值)

效果图:点击NextVC的返回按钮就可以把对应TextView的值回传

  • 代码:

协议:

@protocol TestDelegate <NSObject>@required- (void)sendReuiedValue:(NSString *)value;@optional- (void)sendOptionalValue:(NSString *)value;@end@interface NextVC : UIViewController@property (nonatomic, weak) id delegate;@end

委托人:

 #import "NextVC.h"

 - (IBAction)BackAction:(id)sender {     if (_rTextField.text != nil) {
    
        [_delegate sendReuiedValue:_rTextField.text];
    }     if (_oTextField.text != nil) {
    
        [_delegate sendOptionalValue:_oTextField.text];
    }
     [self dismissViewControllerAnimated:YES completion:^{   
    }];
}

实现者:
#import "ViewController.h"
#import "NextVC.h"

@interface ViewController ()<TestDelegate>@property (weak, nonatomic) IBOutlet UILabel *nLabel;@property (weak, nonatomic) IBOutlet UILabel *oLabel;@end@implementation ViewController- (void)viewDidLoad {
[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.}

 - (IBAction)goToVC:(id)sender {

     NextVC *nextVC = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"NextVC"];    // 指定代理人
     [nextVC setDelegate:self];

     [self presentViewController:nextVC animated:YES completion:^{
    
      }];
}// 必须实现的方法- (void)sendReuiedValue:(NSString *)value{       if (value != nil) {
    
         [_nLabel setText:value];
   }
}// 可选实现的方法- (void)sendOptionalValue:(NSString *)value{     if (value != nil) {
    
       [_oLabel setText:value];
   }
}

总结

Category (分类) 可以将可以复用的方法进行整理, 可以将某个类进行解耦,使其不至于太过臃肿.Protocol(协议) 可以声明一些公用的方法,这样在项目里面查看起来就会比较正规,整洁.具体就看大家的习惯了.



作者:Go_
链接:https://www.jianshu.com/p/792bea5be43a

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消