当前位置: 首页 > news >正文

网站站外推广方式有哪些个人工作室项目

网站站外推广方式有哪些,个人工作室项目,网站建设的需求,国外seo教程Objective-C获取消息工作机制是本文要介绍的内容#xff0c;看name mangling的时候#xff0c;也讲到了Objective-C的name mangling#xff0c;于是又重新读了一下Objective-C 2.0 programming Language以及Objective-C 2.0 Runtime Reference里的相关内容,自己归纳一下 。…  Objective-C获取消息工作机制是本文要介绍的内容看name mangling的时候也讲到了Objective-C的name mangling于是又重新读了一下Objective-C 2.0 programming Language以及Objective-C 2.0 Runtime Reference里的相关内容,自己归纳一下  。      MyClass.h     interface MyClass : NSObject     {      }     end     MyClass.m     #import  spanusr/include/objc/runtime.h    #import “MyClass.h”     void myClassIMP(id _rec, SEL _cmd, int theInt)     {        NSLog(”dynamic added method:%d”,theInt);     }     - (id)init  {      if( ( self  [super init]) ! nil )      {     class_addMethod([MyClass class], selector(dynGeneratedMethod:),(IMP)myClassIMP,”v:i”);       }      return self;  }   Main.c  #import “MyClass.h”  int main(int argc, char *argv[])  {    MyClass theInstance  [[MyClass alloc] init];    [theInstance dynGeneratedMethod:10];   return 0;  }    这段代码执行的结果是在控制台上输出 dynamic added method:10    接着来详细分析一下上面的代码   在ObjC的类中这样的一个声明 – (void)foo:(int)a被称作方法(method),而在调用的地方: [theClass foo:10];则被称之为发送消息(send message),具体来说是给对象theClass 发送foo:消息,注意这里foo后面的”:”它也是消息名称的一部分最前面的-代表实例方法代表类方法  。而类似的语句在C或C中通常被称为呼叫函数call function,在ObjC中函数(function)一词很少用到,不是它不存在而是它被ObjC runtime给隐藏了起来  。   如前所述ObjC是以消息机制来工作的但其实诸如-(void)foo:(int)a的语句在编译时被objc_msgSend(receiver,selector,arg1,arg2,….)替换了所以其实每一条发送消息的代码本质上还是调用函数(call function),不过他们调用的都是同一个函数objc_msgSend也可能是objc_msgSend_stret(返回值是结构体),objc_msgSend_fpret(返回值是浮点型)等)   分析objc_msgSend的参数第一个receiver的类型是id,代表接受消息的对象,第二个是selector代表接收对象的方法后面的是该方法的参数之前那条语句的被编译器替换后就是 [theClass foo:10]  - objc_msg(theClass,selector(foo:),10);    因为消息的接受对象和接受对象的方法都参数化所以在运行时刻接受对象和接受对象的方法都可以是动态的!   比如说程序里面可以这样写 id helper  getTheReceiver();  SEL request  getTheSelector();  [helper performSelector:request];    它的实现是基于ObjC runtime. NSObject类实现了这套机制所以每一个继承于NSObject的类都能自动获得runtime的支持  。在这样的一个类中有一个isa指针指向该类定义的数据结构体,这个结构体是由编译器编译时为类须继承于NSObject创建的.在这个结构体中有包括了指向其父类类定义的指针以及Dispatch table. Dispatch table是一张SEL和IMP的对应表  。   对于名称相同的方法他们都有相同的SEL,方法的名称不包括类名称所以子类和父类中的同名方法拥有相同的SEL,但是他们的实现可以各不相同因而在他们各自的Dispatch表中SEL所对应的IMP是不同的IMP是一个函数指针而虽然每一个SEL对应的是一个方法的名称但考虑到效率SEL本身是一个整型编译器会另外生成一张SEL和方法名称对应的表  。有了这样的结构objc就可以实现多态了  。还是这行代码 [theClass foo:10]    是向theClass发送了foo:消息,那么首先在theClass的类结构的Dispatch table里找有没有对应的SEL如果有的话就表示theClass有响应该消息的方法程序就跳到该方法的代码地址头由IMP指定开始执行  。如果在theClass的Dispatch table找不到对应的SEL,那么就会通过isa所指的结构体中包含的父类指针到父类里面去寻找如果到最后还是没有找到就会出现runtime error.所以说即使theClass以及它的父类都没有定义-(void) foo:(int)a方法程序还是可以通过编译但如果是用xcode的话编译器会有警告告知theClass可能无法响应该消息  。不会报错的原因是类的方法也可以在执行时刻创建上面的代码 class_addMethod([MyClass class], selector(dynGeneratedMethod:),(IMP)myClassIMP,”v:i”);    就是给MyClass类在执行时刻增加了一个响应dynGeneratedMethod:消息的方法这样之后对任何MyClass的instance类发送dynGeneratedMethod:消息就会得到响应了.myClassIMP是类收到该消息时要调用的方法其声明如下 void myClassIMP(id _rec, SEL _cmd, int theInt)    这个方法的前面两个参数是必须的之后的参数才是我们实际用到的参数数目和selector()中的冒号数一样,冒号数代表的就是参数个数  。第一个参数是消息的接受对象是MyClass的实例第二个参数是由SEL代表的具体消息  。   Class_addMethod的最后一个参数是表示dynGeneratedMethod:的返回值和参数信息不过我自己试了一下这个参数不起作用  。   几个要点   1、对于C中被称为函数(function)和函数调用(function call)的地方在ObjC中被叫做方法(method)和发送消息(send message).试图调用未定义的方法会导致编译错误而发送一条消息即使没有任何类定义了响应该消息的方法编译时也不会报错从语义上讲这也是对的发一条消息本来就不要求一定有人会响应不过如果执行到发送消息的代码时真的没有类可以响应的话是会发生runtime error,为了避免这种事情发生可以先进行检测这样写 if( [myClass respondsToSelector:selector(foo:)])  {     [myClass foo:10];  }    我感觉ObjC这样的一套sender receiver的定义更注重面向对象的概念  。类是一个接收者(receiver)如果定义了某个方法就可以接收和这个方法名称相同的消息  。而使用该类的client(sender),则尝试向该类发送消息.如果匹配了就跳到类的方法里执行  。   2、方法名称是诸如foo:不包括返回类型参数类型而又因为一个foo:对应于一个SEL所以说ObjC不支持相同的foo:有不同的返回类型也不支持重载  。不过类方法和实例方法可以有相同的名字而又有不同类型的参数和返回类型,因为它们不是处在同一张dispatch table中  。   3、不仅类的方法可以运行时刻创建类本身也可以在运行时刻创建前面提到继承于NSObject的类,编译器会帮忙生成ObjC runtime所需要的类结构定义只要我们在代码里也按照那个结构创建了自己的类那一样可以获得ObjC runtime的支持  。    转载于:https://www.cnblogs.com/DamonTang/archive/2012/11/08/2760580.html
http://www.yutouwan.com/news/155551/

相关文章:

  • 中国住房和建设部网站首页问答论坛网站建设
  • 网站自己做还是找公司软文网站大全
  • 怎么做中英文双语网站深圳企业网站建设
  • 甘肃省建设厅网站首页网站如何做h5动态页面
  • 上海门户网站制广东网站设计费用
  • 做网站需要的图片中国建设工程质量安全管理协会网站
  • 个人网站 建设宿迁房产交易中心官网
  • 网站开发 入门教程企业邮箱注册申请126官网
  • 做物流哪个网站货源多英文外贸网站源码
  • 网站建设 维护 编程如何在网站做淘宝页面
  • 百度搜索官方网站昆山网站建设ikelv
  • 德阳建设厅官方网站阳西县网络问政平台公众号
  • 给卖假性药的做网站一般要判多久搭建一个网站需要多少钱?
  • 网站建设交印花税嘛中铁建设中南分公司
  • 成都网站建设询q479185700霸屏工程施工行业在哪个网站容易找事做
  • 青岛网站推广招商免费做手机网站
  • 有用unity做网站的吗有些网址打不开怎么解决
  • 邯郸网站建设联系电话两峡一峰旅游开发公司官方网站
  • 安徽中机诚建建设有限公司网站网站克隆 有后台登录
  • 校园网站建设意义竞价托管哪家专业
  • 做国际网站有补贴吗wordpress 建立数据库连接时出错
  • 下载建设银行官方网站下载班级网页html源代码
  • 免费网站代理怎么做网店
  • 网站框架设计wordpress4.7.1漏洞
  • 运城网站推广哪家好宣传片制作公司资质
  • 做平行进口的汽车网站西安营销网站
  • 做电脑网站用什么软件好用吗网站建设源码开发
  • h5网站模板下载百度公司的业务范围
  • 网盘做网站服务器个人域名可以做公司网站么
  • 广东手机网站建设app制作平台大全