@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的介绍的更多相关文章

  1. iOS 阶段学习第24天笔记(Block的介绍)

    iOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地 ...

  2. iOS沙盒机制介绍,Block 的介绍

    一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...

  3. SQLSERVER中的log block校验(译)

    原文:SQLSERVER中的log block校验(译) SQLSERVER中的log block校验(译) 来自:http://sankarreddy.com/2010/03/transaction ...

  4. HTML5中<template>标签的详细介绍

    HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...

  5. meta标签中的http-equiv属性使用介绍(转载)

    meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...

  6. jQuery中$.fn的用法示例介绍

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效,下面有个不错的示例,喜欢的朋友可以参考下 如扩展$.fn.abc(),即$.fn.abc()是对jquery ...

  7. 【转】javascript 中that的含义示例介绍

    var that = this;,这代表什么意思呢?this代表的是当前对象,var that=this就是将当前的this对象复制一份到that变量中,下面为大家介绍这样做有什么意义 你可能会发现别 ...

  8. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  9. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  10. 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 ...

随机推荐

  1. Mac 下配置Tomcat7和eclipse中配置tomcat

    转载自: http://www.cnblogs.com/weilaikeji/archive/2013/05/29/3106473.html 1.下载Tomcat 从Tomcat项目主页下载相关压缩包 ...

  2. DNA比对

    [编程题](满分27分) 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子.它由4种主要的脱氧核苷酸(dAMP.dGMP.dCMT和dTMP)通过磷酸二酯键连接而成.这4种核苷酸可以分别记为 ...

  3. HDU 3999 The order of a Tree 二叉搜索树 BST

    建一个二叉搜索树,然后前序输出. 用链表建的,发现很久没做都快忘了... #include <cstdio> #include <cstdlib> struct Node{ i ...

  4. ORM之PetaPoco入门(二)--Petapoco基本用法

    1. Petapoco基本用法 1.1. 创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件.命名为:PetapocoTest. 程 ...

  5. Linux下的权限掩码umask

    权限掩码umask 我们都知道在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户.用户组用户以及其他用户分配不同的访问权限.那么,我们新创建的目录和文件本身 ...

  6. CentOS(三)--初识linux的文件系统以及用户组等概念

    进入到了Linux学习之CentOS第三篇了,这篇文章主要记录下对linux文件系统的初步认识,以及用户组.用户权限.文件所有者.文件所在组等概念 一.Linux文件结构及基本文件夹 文件系统是Lin ...

  7. 通过ASP禁止指定IP和只允许指定IP访问网站的代码

    过ASP禁止指定IP和只允许指定IP访问网站的代码,需要的朋友可以参考下. 一.禁止指定IP防问网站,并执行相应操作: 代码如下: <% Dim IP,IPString,VisitIP '设置I ...

  8. 我是如何自学Android,资料分享

       我是如何自学Android,资料分享(2015 版) 已经完成,我的建议是先把这一篇看完,再看2015 版的.关于我在学习中开发的项目代码,已经发布在: 爱开发-源码搜索,集成了上万个App源码 ...

  9. Java之绘制实例

    前面已经介绍过绘制方法. 弧形的绘制: package com.caiduping; import java.awt.Graphics; import javax.swing.JFrame; impo ...

  10. linux umount 提示device is busy 的解决

    linux umount 提示"device is busy" 终极解决 为了干净地关闭或热交换 UNIX 或类 UNIX 系统上的存储硬件,必须能够卸载使用此设备上的存储的所有文件系统.但是,如果正 ...