IOS学习笔记十二(类别和扩展)

简介: IOS学习笔记十二(类别和扩展)

1、类别(category)和扩展

类别:OC动态特征许使用类别添加新的方法,不需要创建子类

扩展:和类别相似,扩展相对于匿名类别


2、使用格式

类别:

@interface 已有类(类别名)

@end

@implmentaion 已有类(类别名)

@end

扩展:

@imterface 也有类()

{

   实例变量

}

//方法

...

@end


3、哪些功能

1)、给一个现成的类增加类别,然后实现其方法


2)、模块化设计


3)、调用私有方法(没有在接口部分定义而是在类实现部分定义的方法相对于私有方法,不许调用),通过定义向前引用,实现对私有方法调用


4、测试类别Demo

NSNumer+fk.h

#ifndef NSNumber_fk_h

#define NSNumber_fk_h

#import <Foundation/Foundation.h>

@interface NSNumber(fk)

-(NSNumber *)add:(double)num2;

-(NSNumber *)sub:(double)num2;

@end

#endif /* NSNumber_fk_h */


NSNumer+fk.m

#import <Foundation/Foundation.h>

#import "NSNumber+fk.h"

@implementation NSNumber(fk)

-(NSNumber *)add:(double)num2

{

   return [NSNumber numberWithDouble:([self doubleValue] + num2)];

}

-(NSNumber *)sub:(double)num2

{

   return [NSNumber numberWithDouble:([self doubleValue] - num2)];

}

@end


MyApple.h

#import <Foundation/Foundation.h>

#ifndef MyApple_h

#define MyApple_h

@interface MyApple : NSObject

@property (nonatomic, assign) double weight;

@property (nonatomic, copy) NSString *color;

//java方法构造方法一般没有返回,oc这里需要返回id,记住

-(id)initWithColor:(NSString *)color weight:(double)weight;

@end


MyApple.m

#import "MyApple.h"

//#import "MyApple+fk.h"

#import <Foundation/Foundation.h>

@implementation MyApple

@synthesize color = _color;

@synthesize weight = _weight;

-(id)initWithColor:(NSString *)color weight:(double)weight

{

   if (self = [super init])

   {

       self.color = color;

       self.weight = weight;

   }

   return self;

}

-(NSString *) description

{

   return [NSString stringWithFormat:@"<MyApple[color=%@, weight=%g]>", self.color, self.weight];

}

-(void)test

{

   NSLog(@"this is test method");

}

@end


MyApple+fk.h

#import "MyApple.h"

#ifndef MyApple_fk_h

#define MyApple_fk_h

@interface MyApple(fk)

-(void)test;

@end

#endif /* MyApple_fk_h */


main.h

#import "MyApple.h"

#import "NSNumber+fk.h"

#import "MyApple+fk.h"

int main(int argc, char * argv[]) {

   @autoreleasepool {

       NSNumber *num = [NSNumber numberWithDouble:3.5];

       NSLog(@"3.5 - 2 is %@", [num sub:2]);

       NSLog(@"3.5 + 2 is %@", [num add:2]);

       MyApple *apple = [[MyApple alloc] initWithColor:@"red" weight:5.6];

       NSLog(@"%@", apple);

       //No visible @interface for 'MyApple' declares the selector 'test'

       [apple test];

   }

}


5、运行类别结果

3.5 - 2 is 1.5

3.5 + 2 is 5.5

<MyApple[color=red, weight=5.6]>

this is test method


6、测试扩展的Demo

Car.h

#ifndef Car_h

#define Car_h

#import <Foundation/Foundation.h>

@interface Car : NSObject

@property (nonatomic, copy) NSString *brand;

@property (nonatomic, copy) NSString *model;

-(void)drive;

@end

#endif /* Car_h */


Car+drive.h

#import "Car.h"

#ifndef Car_drive_h

#define Car_drive_h

@interface Car()

@property (nonatomic, copy) NSString *color;

-(void)drive:(NSString *)owner;

@end

#endif /* Car_drive_h */



Car.m

#import <Foundation/Foundation.h>

#import "Car+drive.h"

@implementation Car

@synthesize brand;

@synthesize model;

@synthesize color;

-(void)drive

{

   NSLog(@"%@汽车正在路上奔驰",self);

}

-(void)drive:(NSString *)owner

{

   NSLog(@"%@正驾驶%@汽车在路上奔驰", owner, self);

}

-(NSString *)description

{

   return [NSString stringWithFormat:@"<Car [brand=%@, model=%@, color=%@]>", self.brand, self.model, self.color];

}

@end


main.m

#import "Car+drive.h"

int main(int argc, char * argv[]) {

   @autoreleasepool {

       Car *car = [Car new];

       car.brand = @"奔驰";

       car.model = @"S300";

       car.color = @"red";

       [car drive];

       [car drive:@"chenyu"];

   }

}


7、运行扩展的结果

<Car [brand=奔驰, model=S300, color=red]>汽车正在路上奔驰

chenyu正驾驶<Car [brand=奔驰, model=S300, color=red]>汽车在路上奔驰


相关文章
|
小程序 前端开发 Shell
接入 mPaaS 小程序并实现启动 iOS 版| 学习笔记
快速学习接入 mPaaS 小程序并实现启动 iOS 版。
接入 mPaaS 小程序并实现启动 iOS 版| 学习笔记
|
移动开发 小程序 前端开发
iOS 端自定义开发(二)| 学习笔记
快速学习 iOS 端自定义开发。
iOS 端自定义开发(二)| 学习笔记
|
移动开发 JSON 小程序
iOS 端自定义开发(一)| 学习笔记
快速学习 iOS 端自定义开发。
iOS 端自定义开发(一)| 学习笔记
|
小程序 IDE API
iOS 端预览和调试小程序| 学习笔记
快速学习 iOS 端预览和调试小程序。
iOS 端预览和调试小程序| 学习笔记
|
小程序 Shell 开发工具
接入 mpaas 小程序并实现启动 IOS 版|学习笔记
快速学习接入 mpaas 小程序并实现启动 IOS 版
255 0
接入 mpaas 小程序并实现启动 IOS 版|学习笔记
|
移动开发 人工智能 小程序
iOS 端自定义开发(二)|学习笔记
快速学习iOS 端自定义开发(二)
226 0
|
移动开发 JSON 小程序
iOS 端自定义开发(一)|学习笔记
快速学习iOS 端自定义开发(一)
201 0
iOS 端自定义开发(一)|学习笔记
|
小程序 IDE API
IOS 端预览和调试小程序|学习笔记
快速学习 IOS 端预览和调试小程序
178 0
IOS 端预览和调试小程序|学习笔记
|
API 开发工具 iOS开发
iOS 接入指南|学习笔记
快速学习 iOS 接入指南|
246 0
iOS 接入指南|学习笔记

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    iOS8 中无需开源库的内置功能一览
  • 7
    iOS7应用开发7:自定义视图、手势操作
  • 8
    IOS小工具以及精彩的博客
  • 9
    Facebook SDK(iOS)初学讲解
  • 10
    iOS - Swift NSPoint 位置
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 7
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    235
  • 8
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 9
    深入探索iOS开发中的SwiftUI框架
    145
  • 10
    ios样式开关按钮jQuery插件
    60