zoukankan      html  css  js  c++  java
  • Objective-C基础2

    16.继承

    1)不能和父类定义一样的变量

    2)单一继承,不支持继承多个类

    3)支持多层继承子类也可以被继承

    17.实例变量修饰符

    public:公开的,在其他类中也可以访问

    protected:受保护的类型,只能在当前类和子类中访问

    private:不能直接访问

    .h文件中没有声明的变量和方法,只在.m文件中定义,不能被继承和使用

    18.%@打印对象的地址,默认调用对象的description方法,可以重写此方法

    19.多态:不同的对象以自己的方式响应相同名称方法的能力称为多态

    父类指针指向子类的对象

    20.类的本质是类对象

    1)Class c1=[d class];Class c1=[d1 class];如果d和d1是同一个类的对象,那个c1和c2指向相同的地址

    2)获取方式,通过实例对象获取Class c1=[d class];,通过类名获取Class c1=[Dog class]; 

    3)类对象的使用,代替类名new对象

    21.SEL s1=@selector(test)//手动把test方法包装成sel类型

    [p performSelector:s1];//向test方法发送sel消息,这两句话相当于[p test];

    22.点语法的本质是调用getter、setter方法,不是访问成员变量

    对象.属性=...;//替换为set方法

    ...=对象.属性;//替换为get方法

    23.@property的使用

    写在声明文件中,相当于定义get、set方法声明

    复制代码
    #import <Foundation/Foundation.h>
    
    @interface Animal : NSObject
    {
        int _age;
    }
    
    @property int age;
    
    //-(void)setAge:(int)age;
    //-(int)age;
    
    @end
    复制代码

    24.@synthesize的使用

    写在实现文件中相当于注释部分的代码

    复制代码
    #import "Animal.h"
    
    @implementation Animal
    
    @synthesize age;
    
    //-(void)setAge:(int)age{
    //    self->age=age;//@synthesize age会自动新建一个age实例变量
    //}
    //-(int)age{
    //    return self->age;
    //}
    
    @end
    复制代码

    @synthesize age=_age;//指定实例变量名,不会操作默认的变量

    相当于:

    //-(void)setAge:(int)age{
    //    _age=age;
    //}
    //-(int)age{
    //    return _age; 
    //}

    xcode4.4之后,可以只使用@property而不使用@systhesize,并且不用定义带有下划线的变量

    操作的是带有下划线的实例变量,如果当前类没有下划线的实例变量,则系统会帮我们生成。注意该变量是私有的(相对的,隐藏的)子类看不到

    @property的增强型,在.m文件中重写get、set方法,但是不能同时重写,只能重写一个

    25.动态类型和静态类型

    动态类型:父类的指针指向子类的对象

    静态类型:

    26.id的使用,id是一个万能指针,可以指向任何对象

    NSObject和id都可以指向任何对象

    NSObject对象会进行编译时检查(需要强制类型转换)

    id不需要强制类型转换,id可以直接用

    编译器看到id以后,认为是动态类型,不再检查

    id obj=[Animal new];

    27:动态绑定,内省

    动态类型检测:

    1)判断类型

    1))判断某个对象是否是类的实例对象,或者子类的事例对象

    BOOL isKind = [ani isKindOfClass:[Animal class]];(对象和类)

    2))判断是否是这个类的事例,不管是否是这个类的子类的事例

    isMemberOf(对象和类)

    3))判断是否是子类的事例

    isSubClassOfClass

    BOOL isKind = [Dog isSubClassOfClass:[Animal class]];(类和类)

     2)方法响应的检测

    1))判断对象能否响应指定的方法:

    respondsToSelector:方法的SEL

    2))判断类能否响应指定的方法

    instanceResponseToSelector:方法的SEL

    3)响应方法

    无参:performSelector:SEL

    有一个参数:performSelector:SEL withObject:@"参数"

     有两个参数:performSelector:SEL withObject:@"参数" withObject:@"参数2"

    28.构造方法init,是一个对象方法,返回的是一个对象-调用init方法的对象

    29.重写构造方法

    复制代码
    -(instancetype)init{
        self = [super init];
        if(self){
            _age=10;
        }
        return self;
    }
    复制代码

     

  • 相关阅读:
    SpringCloud Config 配置中心
    MySQL 8.0版本安装后,安装目录下找不到my.ini文件
    MySQL 跨库JOIN
    SpringCloud Ribbon 自定义负载均衡算法
    idea部署tomcat,日志打印显示乱码问题解决
    centos7配置回环网卡地址
    INV*物料接收子库存更新
    AP*供应商更新
    AR*Hz_Parties 客户表更新
    MyBatis-Plus自动生成代码
  • 原文地址:https://www.cnblogs.com/fanglove/p/4935202.html
Copyright © 2011-2022 走看看