OC学习总结(一)

OC学习总结(一)    
1、构造方法
    重写构造方法,使得对象创建出来的时候就有初值

//不带参数
    - ( instancetype ) init

{

// 先调用父类的init初始化方法,返回地址给当前对象(是赋值(=)不是等于(==),然后判断当前对象是否为空(nil,若不为空,则说明初始化成功,继续对成员变量赋值;反之,则不成功,返回当前对象直接退出

        //谁的成员变量,谁就进行初始化(子类新添加的成员变量自己初始化,从父类继承的由父类继承) 

    if(self = [super init])  

    {

        self.name = @“马化腾”;

        self.age = 40;

        self.height = 178;

    }

    return self;

}

//带参数

- (instancetype) initWithName:(NSString *) name andAge:(int) age andHeight:(float) height

{

    if(self = [super init])  

    {

        self.name = name;

        self.age = age;

        self.height = height;

    }

    return self;

} 
注:初始化方法一般都以init开头,增加代码可读性,便于同事之间交流,称为init家族方法 

2、
分类 

1、分类的作用

      分类:可以给某一个类扩充一些方法(不修改原来类的代码)

      在不修改原来类内容的前提下,给类扩充方法有2中方法:1>继承;2>分类(Category

      Category格式:

        1)分类的声明:

            @interface 类名(分类名称)

             方法声明

            @end
            #import "ZYPerson.h"


            @interface ZYPerson (ZY)


            - (void) printName;


            @end 

        2)分类的实现

            @implementation 类名(分类名称)

             //方法实现

            @end
            #import "ZYPerson+ZY.h"


            @implementation ZYPerson (ZY)


            - (void) printName

            {

                NSLog(@"我的名字是(ZY)%@"self.name);

            }


            @end


   2、使用注意

      1Category可以访问原来类的实例变量,但不能添加变量,只能添加方法。如果想增加成员变量可以考虑通过继承创建子类

      2)分类方法中可以访问原来类中声明的成员变量

      3Category可以重新实现原来类中的方法,但会覆盖掉原来的方法,导致原来的方法失效,因此不推荐这么做

      4)方法调用的优先级:

           1>分类(最后参与编译的分类优先执行)

           2>原来类

           3>父类

       多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
 

    3、好处

      1)一个庞大的类可以分模块开发

      2)一个庞大的类可以由多个人来编写,更有利于团队合作

  
3、SEL(消息机制)
   //类的声明

    #import <Foundation/Foundation.h>


    @interface Person : NSObject


    - (void) test;


    @end 

  
//类的实现
  
@implementation Person


    - (void) test

    {

        NSLog(@"调用了test方法---");

        //传入_cmd,表示调用当前方法,会产生死循环

        //[self performSelector:_cmd];

    

    }


    @end

//程序入口

#import <Foundation/Foundation.h>

#import "Person.h"


//先把方法包装成一个SEL数据,然后通过这个数据找到方法所在的地址,进而调用方法

int main(int argc, const char * argv[]) {

    Person *p = [[Person allocinit];

    [p test];

    

//    SEL s2 = @selector(test);

//    [p performSelector:s2];

//    SEL s = NSSelectorFromString(@"test");   字符串转SEL数据

//    NSString *s1 = NSStringFromSelector(@selector(test));   SEL数据转字符串

//    [p performSelector:s];

//    NSLog(@"%@", s1);

    return 0;

} 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值