object-c中的类目,延展,协议
协议 |
@required //必须实现的方法
-(void)study;
@optional //可实现可不实现的方法
-(void)work;
@implementationStudeny
-(void)study{
NSLog(@"%s",__func__);
}
//-(void)work{
// NSLog(@"%s",__func__);
#import"Studeny.h"
@autoreleasepool{
Studeny*stu=[[Studenyalloc]init];
// [stu study];
//判断协议是否有该方法
if([sturespondsToSelector:@selector(study)]){
[stustudy];
// [stu work];
}else{
NSLog(@"找不到好工作");
}
}else{
NSLog(@"没有参加培训");
}
if([stuconformsToProtocol:@protocol(lamcoProtocol)]){
if([sturespondsToSelector:@selector(giveMoney)]) {
NSLog(@"每月还钱");
}else{
NSLog(@"成为黑户");
}
}else{
NSLog(@"不关事");
}
}
return0;
延展 |
@interfaceMyClass()
-(void)add;
@interfaceMyClass :NSObject
-(void)select;
@implementationMyClass
-(void)select{
NSLog(@"%s",__func__);
}
-(void)add{
NSLog(@"%s",__func__);
}
intmain(intargc,constchar* argv[]) {
@autoreleasepool{
MyClass*class=[[MyClassalloc]init];
[classselect];
[classadd];
}
return0;
分类(类目) |

#import<Foundation/Foundation.h>
#import"NSString+CategoryNSString.h"
intmain(intargc,constchar* argv[]) {
@autoreleasepool{
NSString*str=@"abc";
NSLog(@"%@", [str Reverser]);
NSLog(@"%d",[str leng].intValue);
}
return0;
#import<Foundation/Foundation.h>
@interfaceNSString (CategoryNSString)
-(NSString*)Reverser;
-(NSNumber*)leng;
#import"NSString+CategoryNSString.h"
@implementationNSString (CategoryNSString)
/**
* 字符串反转函数
*
* @param string传入的字符串
*
* @return逆序后的字符串
*/
-(NSString*)Reverser{
NSMutableString*str=[NSMutableStringstring];
for(unsignedlongi=(self.length); i>0; i--) {
[strappendFormat:@"%c",[selfcharacterAtIndex:i-1]];
}
returnstr;
}
/**
* 把字符串长度int类型变成NSNumber类型
*
* @param string出入的字符串
*
* @return NSNumber,字符串的长度
*/
-(NSNumber*)leng{
NSNumber*num=[[NSNumberalloc]initWithUnsignedLong:self.length];
returnnum;
}

@interfaceMyClass :NSObject
-(void)Select;
@end
@interfaceMyClass (CategoryUpdate)
-(void)update;
@end
@interfaceMyClass (CategoryAdd)
-(void)add;
@end
@interfaceMyClass (CategoryDeleta)
-(void)delect;
-(void)Select{
NSLog(@"%s",__func__);
}
@implementationMyClass (CategoryAdd)
-(void)add{
NSLog(@"%s",__func__);
}
@implementationMyClass (CategoryUpdate)
-(void)update{
NSLog(@"修改");
}
@implementationMyClass (CategoryDeleta)
-(void)delect{
NSLog(@"删除");
}
#import ,@class ,#include三者之间的区别
object-c中的类目,延展,协议的更多相关文章
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
- Objective-C中的类目(Category),延展(Extension)
类目和延展的作用都是为了扩展一个类. Objective-C中的类目(Category) 一.类目的定义和作用 类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法. 比如, ...
- Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战
Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...
- Objective-C学习笔记类目、协议
不是所有的方法都可以被覆盖的!比如:intValue就不能被覆盖!! 原因正在查找中! 别人的电脑上却可以! 类目.h件 #import <Foundation/Foundation.h> ...
- iOS类目、延展和协议
类目:为已知的类增加新的方法:注意:类目里面只能写方法,不能写声明和属性,所以,类目不能作为接口来用 1.类目无法向已有类中添加实例变量.2.如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优 ...
- objective-c 类目(Category)和延展(Extension)
类目的基本概念: 如果有封装好的一个类,随着程序功能的增加,需要在类中增加一个方法,那我们就不必在那个类中做修改或者再定义一个子类,只需要在用到那个方法时添加一个该类的类目即可. 1.在类目定义的方法 ...
- OC中协议, 类目, 时间, 延展, 属性
只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...
- OC 中 类目、延展和协议
Category : 也叫分类,类目. *是 为没有源代码的类 扩充功能 *扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承 *该方法只能扩充方法,不能扩充实例变量 ...
- iOS -类目,延展,协议
1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...
随机推荐
- UnWind Segue
iOS 6 和 Xcode 4.5 中添加了一个新特性叫做“Unwind Segue”. 使用Unwind Segue,可以方便的在Navigation Controller的Controllers之 ...
- JavaScript面试库
1.将一段字符串转成驼峰命名法. var str = "web-kit-index"; function to(str){ var j = str.split("-&qu ...
- ionic 实现自动升级APP
最近做移动商城开发,需要一个自动升级APP的功能,在网上搜罗很多,发现有的是下载APK,有的在我这服务无法实现,由于时间原因,都被PASS了,最后找到了一个热更新插件,经过半天的调试,可以使用,很欣喜 ...
- mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
使用mysql的时候,用到int类型的蛮多,需要注意一下: 1. 值的范围 Type Storage Minimum Value Maximum Value (Bytes) (Signed/Uns ...
- SQL Server里Grouping Sets的威力
在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务 ...
- C++中的静态绑定和动态绑定
C++在面向对象编程中,存在着静态绑定和动态绑定的定义,本节即是主要讲述这两点区分.我是在一个类的继承体系中分析的,因此下面所说的对象一般就是指一个类的实例.首先我们需要明确几个名词定义: 静态类型: ...
- CSS魔法堂:选择器及其优先级
一.前言 首先看看一道阿里这期网申的题目吧! 1.找出下面优先级相同的选择器 A. img.thumb:after B.[data-job="frontend"]::firs ...
- OS X(EI Capitan)常用快捷键整理
刚上班就配了台RMBP,虽然触摸板确实好用,但是对鼠标的支持太差导致无法使用鼠标,而某些功能用触摸板还是不很方便 于是使用快捷键就势在必行了,参考了苹果官方文档和一些其他资料,整理出常用快捷键清单 准 ...
- [团队项目] Scrum 项目 3.0 SCRUM 流程的步骤2: Spring 计划
SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. 3 ...
- 使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法
当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType ...