Objective-C中class、Category、Block的介绍
@class
当定义一个类,必须为编译器提供两组消息,第一组(接口部分.h):构建类的实例的一个基本蓝图。必须指定类名,类的超类,类的实例变量和类型的列表,最后是类的方法的声明。第二组(实现部分.m):实现类的方法的代码。
例如: ------------------------------ RockStar.h -------------------------------------------
#import<Foundation/Foundation.h>//?用#import呢,原因RockStar继承NSObject类,需要知道NSObject的方法属性等,所以用#import。
@class Banid;//这里为什么没用#import “Banid”,导入包是把所有的信息导入,这个效率比较低,而@class只是说明Banid是一个类,在实现部分在导入包(import),效率高
@interface RockStar:NSObjtect
@end
-------------------------------- RockStar.m------------------------------------------------------------
#import ”RockStar.h”
#import “Banid.h”
@implementation RockStar
@end
Category分类有三个使用场景:定义一个类时某些情况系(需求变更),需要添加新的方法2、团队合作方法的实现3、对基础类库中的方法的扩充,例如NSString+JSON.h为NSString这个类拓展一些解析JSON的方法
@interface Student(Text)//这是一个分类,是对Student类的拓展,对Stduent方法属性等的补充。
@end
Protocal(协议说就是一系列方法的列表,其中声明的方法可以被任何类实现,这种模式一般称为代理(delegation0式,相当于java中的接口,但是协议中的方法可以部分实现,不需要全部
------------------------------TabelPrinter.h-----------------
@protocal TablePrintDataSource
@required//必需的,默认是必须的,也就是使用的类必须实现所有的方法(但也不强求也就是说你不实现编译器也可以通过,再次强调OC是一种弱语言)
-(NSString*)stringForRowAtIndex: (int)index;
-(int) numberOfRowsInTable;
@optionl//可选的
-(NSString*) tableTitle;
-(BOOL) printLineNumber;
@end
@interface TablePrinter:NSObject
@property(nonatomic,assign)id<TablePrintDataSource> datasource;//这里弱引
-(void)printable;
@end
在另一个类中使用时在.h中添加@protocal TablePrintDataSource ;在.m中添加
#import “Table”
或者协议可以单独写出来:项目中有,别的地方用时在.h中添加@protocal TablePrintDataSource ;在.m中添加#import“TablePrintDataSource.h”
Block
Block可以访问外面定义的变量,__block int c=20,这样可以外部写该外部变量,否则不可以修改,只可以使用
例子1、
int j=10;
int (^blockPtr)(int)=^(int n){return j+n}; //带一个参数返回值为int的块,块是基于栈的,块与自动变量拥有相同的生命周期。(^)脱字符
j=20;
int k=blockPtr(5);//k is 15,not 25
例子2、
Void someFunction(int (^blockArg)(int));
Int (^doubler) (int)=^(int n){return n*2};
someFunction(doubler);
例子3、
void someFunction(int (^blockArg)(int));
someFunction(^(int n){ return n*2;});
例子4、
Void text()
{
Typedef int (^Sum)(int,int);
Sum sum=^(int a,int b){return a+b;};
Objective-C中class、Category、Block的介绍的更多相关文章
- iOS 阶段学习第24天笔记(Block的介绍)
iOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地 ...
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
- SQLSERVER中的log block校验(译)
原文:SQLSERVER中的log block校验(译) SQLSERVER中的log block校验(译) 来自:http://sankarreddy.com/2010/03/transaction ...
- HTML5中<template>标签的详细介绍
HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...
- meta标签中的http-equiv属性使用介绍(转载)
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...
- jQuery中$.fn的用法示例介绍
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效,下面有个不错的示例,喜欢的朋友可以参考下 如扩展$.fn.abc(),即$.fn.abc()是对jquery ...
- 【转】javascript 中that的含义示例介绍
var that = this;,这代表什么意思呢?this代表的是当前对象,var that=this就是将当前的this对象复制一份到that变量中,下面为大家介绍这样做有什么意义 你可能会发现别 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- SSH框架应用中常用Jar包用途介绍
struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...
随机推荐
- vb.net向Excel中写入值
根据网上例子结合自己的工具环境修改后测试可以通过 我使用的工具:Microsoft Visual Studio 2010,Excel 2007 一.在D盘新建一个temp文件夹用于存放Excel启动时 ...
- Krypton Factor
Krypton Factor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Sorting It All Out
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- hdfs: 一个分布式文件系统(一)
一. hdfs设计的动机 为大规模分布式计算准备的分布式文件系统,并非实时性要求很高的文件系统. 二. 设计的取舍 1. 因为要求有高吞吐量,所以牺牲读取文件的实时性,实时性要求高的分布式文件系统可以 ...
- iOS 数据类型
标签: 数据类型 1.Objective-C数据类型可以分为:基本数据类型.对象数据类型和id类型. 2.基本数据类型有:int.float.double和char类型. 3.对象类型就是类或协议所声 ...
- [转]网站优化-IIS7下静态文件的优化
本文转自:http://www.cnblogs.com/Leung/archive/2009/10/26/1590256.html 在网站开发过程中,通常我们会对网站的静态文件做处事,像图片文件,CS ...
- HDU 3533 Escape (BFS + 预处理)
Escape Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- H.264编码之IDCT变换原理
上次讲到了DCT变换的推导过程,这次主要给大家讲下IDCT反变换的推导过程.建议大家先看上次讲的DCT变换公式推导过程.这样在看这篇文章时会容易很多!话不多说,让我们开始IDCT的旅程吧! IDCT反 ...
- Java操作字符串的工具类
操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...
- css3 边框记
css3 边框 border属性在css1中就已经定义了,使用它可以设置元素的边框风格,边框颜色以及边框粗细. border-width:设置元素边框的粗细. border-color:设置元素边框的 ...