OC的基础语法(六)

1.动态类型检测方法

/*

  动态类型检测的方法

   1)判断对象所属关系

      (1)判断某一个对象是否是指定类或者该类的子类的对象

      (2)判断某一个对象是否是指定的类的实例对象

      (3)判断某一个类是否是指定类 的子类

   2)判断能否响应方法

       1)判断对象能否调用指定的方法

       2)判断类中是否有指定的方法

   3)应用Select方法

       1)没有参数

       2)有参数

 */
#import <Foundation/Foundation.h>
#import "BigYellowDog.h"
#import "Cat.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

//        Dog *dog = [Dog new];
//        [dog run];

        //这种写法会报错
        //[(BigYellowDog *)dog lookHome];
        id obj;
        //判断 dog 是 BigYellowDog类或者子类的 实例对象
        //格式:[对象 isKindOfClass 类对象];
        //  YES 1   dog是BigYellowDog 类或者子类的对象
        //创建 byd 对象
        BigYellowDog *byd = [BigYellowDog new];
        //给obj赋值
        obj = byd;
        //定义dog对象
        Dog *dog = [Dog new];
        //给obj赋值
        //obj = dog;
        //此时检测obj类型是否是BigYellowDog类或者其子类的对象
        BOOL b1 = [obj isKindOfClass:[BigYellowDog class]];
//        if(b1){
//            //如果是BigYellowDog类的对象则,可以调用lookHome方法
//            [(BigYellowDog *)obj lookHome];
//        }

        // byd 是动物类的子类的对象
        b1 = [byd isKindOfClass:[Cat class]];

        //2、检测对象是否是指定类的实例对象
        //[对象 isMemberOfClass:指定的类对象];
        b1 = [byd isMemberOfClass:[BigYellowDog class]];

        //3、检测某个类是否是指定类的子类
        //  [类A isSubclassOfClass 类B];
        //  检测A是否是B类的子类
        //    [byd class] --> BigYellowDog
        b1 = [[byd class] isSubclassOfClass: [Animal class]];

        //4、判断对象是否能够响应指定的方法
        //  [对象 respondsToSelector 方法的SEL];
        SEL srun = @selector(lookHome);
        //定义有参数的SEL
            //srun = @selector(eat:);
        //检测 byd 对象能否响应 run 方法
        b1 = [byd respondsToSelector:srun];
//        if(b1){
//            [byd lookHome];
//        }

        //5、判断类是否能够响应指定的方法
        //  [类名 instancesRespondToSelector:方法的SEL];
        b1 = [Dog instancesRespondToSelector:srun];

        //6、响应方法,(如果能够响应,则调用该方法)
        //   [对象 performSelector:方法的SEL];表示去调用方法
        if([byd respondsToSelector:srun]){

            //如果能够调用 lookHome ,则调用该方法
            [byd performSelector:srun];
        }

        //7、响应方法,(带一个参数)
        srun = @selector(eat:);
        //[byd eat:@"热狗"];
        [byd performSelector:srun withObject:@"热狗"];

        NSLog(@"b1 = %d",b1);

    }
    return 0;
}

2.构造方法

@implementation Student
-(id)init{

    //先初始化父类的
    if(self = [super init]){
        //初始化自己的
        _sno = 1;

    }
    return self;
}
@end

3.自定义构造方法

/*
 自定义构造方法的规范:

    1)一定是对象方法

    2)返回值类型一般是 id 类型

    3)方法的名称一定是以 initWith

 //需求:创建人得时候,初始化年龄为指定的年龄

 */
@implementation Student
-(id)initWithAge:(int)age andName:(NSString *)name andSNO:(int) sno{

    //先要初始化父类的
    if (self = [super initWithAge:age andName:name]) {
        //判断是否初始化成功

        //初始化当前类的成员变量
        _sno = sno;

    }
    // 返回值
    return self;

}
@end
时间: 2024-10-08 11:58:23

OC的基础语法(六)的相关文章

C和OC的基础语法(易混淆的概念知识)

List 0. 深复制与浅复制, NSObject万能指针.id指针.instancetype区别,单例import.include.@class的区别 strong 与 weak 区别 #define  和  typedef的区别, static 与  extern 区别,@required与@optional 区 别,@private.@protected .@public.@package区别 变量的命名规则以及规范(4规则,2规范) 数据类型转换 printf与scanf,自增自减,逻辑

OC的基础语法(一)

1.很多语言都是从helloWorld开始学习的,OC的helloWorld如下: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // OC版的HelloWorld NSLog(@"Hello, World!"); } return 0; } 2.代码分析 1)头文件 对比c语言中的#include学习 #include <s

Python 基础语法六 ——函数

一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号(:),然后在缩进块中编写函数体,函数的返回值用return 语句返回. def area_of_square(x): s = x*x return s 1 def area_of_square(x): 2 s = x*x 3 return s 2.全局变量 定义:在函数外面定义的变量称为全局变量.

Java基础语法&lt;六&gt; 数组 Arrays

允许数组长度为0 new element[0] 数组长度为0与null不同 数组拷贝 允许将一个数组变量拷贝给另一个数组变量.这时,两个变量将引用同一个数组: int[] ele1 = ele2; ele1[5] = 12; //now ele2[5] is also 12 如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyTo方法: int[] copiedele = Arrays.copyOf(ele1,ele1.length); 第2个参数为数组的长度,通常

015-OC基础语法-OC笔记

学习目标 1.[了解]Objective-C语言简介 2.[掌握]第一个OC程序 3.[掌握]OC中的字符串 4.[熟悉]OC中的一些玩意 5.[了解]面向过程与面向对象 6.[掌握]类的声明和实现 7.[掌握]类的方法 一.Objective-C语言简介 Objective-C简称Obj-C或者OC,Objective的意思就是面向对象的.OC其实就是在C语言的基础之上,封装了一层面向对象的语法,他并不是一门全新的编程语言.OC是Mac OS X系统和iOS系统的主要开发编程语言,当然马上要被

【OC基础语法考试】

OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 试题如下: 1.将包含以下三个字符串@“1hello“,@“2word“,@”3good“的数组改写为字典,数字部分作为key,英文部分作为value.(15) 2.建立一个数组对象,使用3个不同的方法,使其引用计数增加为4,输出这个值,然后保证内存能够正确释放.(15) 3.使用

IOS_OC_基础语法

1.YES与NO Object-c 提供了 BOOL 类型, 但这个BOOL 类型和 C++里的并不一样: 在C++里一切非 0 值的东西都 为 true,而为 0 值的为 false.但是 Object-c 里 1 为 true 并被宏定义为 YES=1,0 为 false 并被宏定义为 NO=0. + (BOOL)isEquals:(int)x with:(int)y { return x - y; } if ([Provider isEquals:10 with:1021]) {// ==

嵌入式linux C++语言(二)——C++对C语言基础语法的扩展

嵌入式linux C++语言(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.类型增强 1.类型检查更严格 在C语言中: const int a = 100; int *p = &a; 在C++语言中: const int a = 100;//必须在定义的时候初始化 const int *p = &a; 在C++语言中不能隐式转换数据类型. error: invalid conversion

Python基础语法(转)

作者:Peter 出处:http://www.cnblogs.com/Peter-Zhang/ Python 基础语法(一) Python的特点 1. 简单 Python是一种代表简单思想的语言. 2. 易学 Python有极其简单的语法. 3. 免费.开源 Python是FLOSS(自由/开放源码软件)之一. 4. 高层语言 使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层细节. 5. 可移植性 Python已被移植到很多平台,这些平台包括Linux.Windows.Free