OC语法--多态的动态识别及@selector()预编译指令指定选择器

重写:子类方法覆盖父类方法,要求方法名和参数都相同。

重载:同一个类中的两个或两个以上的方法名相同,但是参数不同,方法体也不同。

多态动态识别

对象是不是aClass或其子类的成员?

if([audi isKIndOfClass:[Car class]]){

NSlog(@“audi is a kind of Car");

}

对象是不是aClass成员?

if([car isMemberOfClass:[Car class]]){

NSlog(@“audi is member of Car");

}

对象是不是aClass子类

if([Audi isSubclassOfClass:[Car class]]){

NSlog(@“Audi is subclass of car");

}

判断两个对象是否同一个类型

if([Audi class]==[Benz class]){

NSlog(@“audi and benz is the same class");

}

对象是否响应aSelector指定方法

if([car respondsToSelector:@selector (run)]){

NSlog(@“car responds to run method");

}

@selector()预编译指令指定选择器,其中方法名位于圆括号中。

对象调用aSelector指定的方法

SEL action;

[email protected](run);

[car performSelector : action];

等同于 [car performSelector:@selector(run)];

对像调用aSelector指定的方法,传递参数object

-(id)performSelector:(SEL)aSelector;

withObject:(id)object;

对象调用aSelector 指定的方法,传递参数object1和object2

-(id)performSelector:(SEL)aSelector;

withObject:(id)object;

withObject:(id)object;

时间: 2024-10-08 20:33:58

OC语法--多态的动态识别及@selector()预编译指令指定选择器的相关文章

OC多态,动态类型绑定

// //  main.m //  OC7类 // //  Created by Zoujie on 15/8/23. //  Copyright (c) 2015年 Zoujie. All rights reserved. // #import <Foundation/Foundation.h> #import "Fraction.h"//导入头文件 #import "Complex.h" #define Choose  0 int main(int 

第一次接触OC多态,动态类型与动态绑定

多态:允许不同的类定义相同的方法. 动态类型:程序直到执行时才能确定所属的类. 动态绑定:程序直到执行时才能确定实际要调用的方法. id类型:一种通用的对象类型,也就是说,id可以用来存储属于任何类的对象,让不同类的输出不用特定设定,通用一个id类型就好. 多态的出现时为了让不同的类能使用同明的方法.比如add,这个让程序的可读性大大提高,也降低了编程难度.add就是+,哪种类型的+都用add标明方法,清晰易懂. 动态类型与动态绑定是为了解决随多态的便利而引起的弊端,有了动态类型与动态绑定,不用

转:OC面向对象—多态

OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. Animal类的声明 Animal类的实现 Dog类继承自Animal类 Dog类的实现 测试程序: 二.使用注意 代码分析: Dog *d=[[Animal  alloc] init];   动物是一条狗?语义正确吗? NSString *str=[Dog  new];     狗是一个字符串?

【IOS】IOS快速入门之OC语法

Objective-C 是 C 语言的超集 您还可以访问标准 C 库例程,例如在 stdlib.h 和 stdio.h 中声明的那些例程. Objective-C 还是一种非常动态的程序设计语言,而且这种动态是其最大优势.这种动态体现在它允许在运行应用程序时(即运行时)才去确定其行为,而不是在生成期间就已固定下来.因此,Objective-C 的动态机制让程序免受约束(编译和链接程序时施加的约束):进而在用户控制下,将大多数符号解析责任转移到运行时. 当您想要在源代码中包括头文件时,请在头文件或

OC面向对象-多态

OC面向对象-多态 一.基本概念 1>多态在代码中的体现,即为多种形态,没有继承就没有多态 2>在使用多态时,会进行动态检测,以调用真实的对象方法 3>多态在代码中的体现即父类指针指向子类对象 Animal类的声明 #import <Foundation/Foundation> //声明一个Animal类,该类继承自NSObject @interface Animal : NSObject //在Animal类中声明一个eat的对象方法 -(void) eat; @end A

oc 语法 kvo

点名主题 : kvo就是一个类来监听另外一个类的变量,当变量发生改变的时候来通知这个类. 举个例子: 创建一个人的类,人的类中有一个银行卡:创建一个银行卡的类,银行卡的类中有一个钱的变量: 我们来用人的类来监听银行卡中的钱数,当银行卡中的钱数发生改变的时候来通知人: 下面我们来实现这个例子: 新建一个 创建一个person类 person.h #import <Foundation/Foundation.h> @class BankCard; @interface Person : NSObj

浅谈为什么只有指针能够完成多态及动态转型的一个误区

c++多态由一个函数地址数组Vtable和一个指向Vtable的指针vptr实现. 具体来说,类拥有自己的vtable,类的vtable在编译时刻完成. 每个对象有自己的vptr指针,该指针初始化时指向对象所实现的类的vtable. 关于向上转型的误区: 通常对于向上转型的理解是这样的,当子类对象向上转型(允许隐式)成父类对象时,实际上只是将子类对象暂时看做父类对象,内部的数据并未改变. 对于没有虚函数的对象,这句话是正确的,但是,当引入虚函数后,这样的理解是有问题的,实际上,向上转型的过程中,

【OC语法快览】三、创建实例对象

Creating Objects  创建对象 There are two main ways to create an object. The first is the one you saw before: 创建对象主要有两种方法.第一种如下: NSString* myString = [NSString string]; This is the more convenient automatic style. In this case, you are creating an autorel

C++ 静态多态和动态多态 浅析

今天的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural).面向对象形式(object-oriented).函数形式(functional).泛型形式(generic).元编程形式(metaprogramming)的语言. 这些能力和弹性使C++成为一个无可匹敌的工具,但也可能引发使用者的某些迷惑,比如多态.在这几种编程泛型中,面向对象编程.泛型编程以及很新的元编程形式都支持多态的概念,但又有所不同.