点语法和动态类型

点语法:

对象.属性名

注意:此时并不是直接访问实例变量,而是xcode看到点语法后,会自动替换成[p setAge: 18]方法, 当出现在左侧时则替换为[p age]的get方法

不能使用self.age会出现死循环

20)@property:

@property是编译器的指令,告诉编译器声明属性的访问器方法

@synthesize是实现@property声明的get和set方法

当类型一致时,可以用@property age,weight来定义属性方法

默认的是:

setAge:(int) age{

self->age = age;

}

@synthesize指定实例变量赋值

@synthesize age = _age, weight = _weight;

当指定实例变量名之后,此时不会生成也不会再操作默认实例变量了

展开为:

-(void)setAge(int) age{

_age = age;

}

-(void)age{

return _age;

}

xcode4.4之后可以只使用@property 而不使用@synthesize(get方法和set方法可以在.m中手动实现,但不能同时手动实现)

声明和实现了 _age, _name的get和set方法,操作的是带有下划线的实例变量

如果我们当前类没有下划线的实例变量,则系统会帮我们自动生成,并且不会被子类继承

21)动态类型:

多态:允许不同类定义相同方法

动态类型:程序直到执行时才能确定所属的类

静态类型:将一个变量定义为特定类的对象时,使用的是静态类型

动态绑定:在oc中一个对象内是否调用指定的方法不是由编译器决定而是由运行时决定,这被称作方法的动态绑定

-(BOOL)isKindOfClass:classObj  判断实例对象是否是这个类或这个类点子类的实例对象

BOOL isinstance = [ani isKindOfClass: [Animal class]];

-(BOOL)isMemberOfClass:classObj判断是否是这个类的实例,不管是这个类子类的实例

isInstance = [dog isMemberOfClass:[Animal class]];

+(BOOL)isSubclassOfClassObj判断类是否是指定类的子类(注意是类不是对象啊,参数必须是class类型)

isInstance = [dog isSubclassOfClass:[Animal class]];

-(BOOL)respondsToSelector:selector 判断实例是否有这样的方法

SEL s1 = @selector(eat);  //把eat包装成SEL类型

判断实例对象能否响应(调用)指定方法:

BOOL isRespond = [ani respondToSelector:s1];

判断类能否响应(调用)指定方法:

isRespond = [Dog instancesRespondToSelector:s1]; 或下面这种

isRespond = [Dog instancesRespondToSelector:@selector(run)];

响应方法:

if([ani respondsToSelector:@selector(eat)]){

//[(Dog*)ani eat];

[ani performSelector:s1];(作用,响应方法)

}else{

NSLog(@"该对象不能调用此方法");

}

时间: 2024-08-10 17:17:00

点语法和动态类型的相关文章

Objective-C中的多态、点语法和动态类型总结

一. 多态 1. 多态概念,定义 什么是多态:多态就是某一类事物的多种形态: 表现形式:  Animal *ani = [Dog new]; 多态条件:1.有继承关系     2.有方法的重写 2.多态代码实现: //实例化猫的对象 Animal *animal  = [Cat new]; //父类的指针指向子类对象: [animal eat]; //实例化狗的对象 animal = [Dog new]; //父类的指针指向子类对象. [animal eat]; 3.多态注意点: 1) 如果存在

(转)Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

本文转自http://blog.csdn.net/totogo2010/article/details/7714960 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例 ps:本篇新建的类主要用于熟悉本篇内容设计,未考虑内存管理因素. 我们试试这两个方法的使用. 1.新建Per

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

转自:著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 原创链接:http://blog.csdn.net/totogo2010/article/details/7714960/# 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMembe

黑马程序员---OC基础5【点语法】【@property关键字】【@synthesize关键字】【id类型】【动态类型】【构造方法】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [点语法] 1 1.使用“点语法” 2 Student *stu= [[Student alloc]init]; 3         //调用set方法 4         [stu setAge:20]; 5         [stu setName:@"Jone"]; 6         //点语法:xcode的特性,Xcode帮我们做了代码替换 7         //点语法,

编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别

最近在研究Python和Erlang.反复提到动态类型语言.动态语言.解释型语言这些概念.这些概念很生涩,在这里做一个总结. 编译型语言和解释型语言 1.编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言.一般需经过编译(compile).链接(linker)这两个步骤.编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件. 优点:编译器一般会有预编译的过程对代码进行优化.因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行

弱类型、强类型、动态类型、静态类型语言的区别是什么?

作者:amalgamation链接:https://www.zhihu.com/question/19918532/answer/21647195来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继续执行,但可能出现任意行为.如C里的缓冲区溢出.Jump到错误地址 Forbidden Beh

动态类型

作者:rainoftime链接:http://www.zhihu.com/question/19918532/answer/21647195来源:知乎著作权归作者所有,转载请联系作者获得授权. 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对“严格”的说法. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继续执行,但可

强类型、弱类型、动态类型、静态类型语言

收集了一些关于编程语言分类的文章: 一. 作者:rainoftime链接:https://www.zhihu.com/question/19918532/answer/21647195来源:知乎 类型系统的一些概念,众说纷纭,使用上也比较乱.有些东西,甚至不好严格定义.以下算学术界的一种相对"严格"的说法. 1. 先定义一些基础概念 Program Errors trapped errors.导致程序终止执行,如除0,Java中数组越界访问 untrapped errors. 出错后继

【转】解析JDK 7的动态类型语言支持

http://www.infoq.com/cn/articles/jdk-dynamically-typed-language Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一直没有发生任何变化[1].随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令.这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8