第二十天

@class 用在两个类交叉去声明的时候,只是声明类,如果用到类中的方法,就要去用#import来导入头文件。

id类型---相当于void*, 通用的指针类型,可以指向任意对象。本身就是指针类型,所以定义的时候不需要加上*   例如: id  new=[类名  new]; 也可以用在:类名  *new=[类名 new];    id newone=new;  然后newone就可以调用类中的对象方法。  一般用于返回值和参数不确定的时候。


类的构造方法:(初始化方法)

TYPerson *new=[TYPerson new];分配空间,把空间中数据全部清空

把上面的创建对象拆分

1.分配空间 alloc是类方法

TYPeron  *p1=[TYPerson alloc];

2.初始化  init是对象方法

TYPerson *p=[p1 init];

如果不想清空空间,可以自己来写init方法.

复写init方法的要求:必须调用父类的init方法,判断self是否为空,不为空则给成员属性赋值。

-(id)init{
      self=[super init];
      if(self){
         self->_name=@"haha";
         self->_age=10;
    }
    return self;

}
定义一个类   Person *new=[[Person alloc]init];

-(id)initwithname:(NSStirng *)name init_age:(int)age{
     self=[super init];
     if(self){
      self->_name=name;
      self->_age=age;
      }

return self;
}
Person *newperson=[[Person alloc]initwithname:@"hehe" init_age:10];


SEL变量:SEL method=@selector(方法名);Person *p=[[Person alloc]init]; 判断p能否执行method的方法

if(p respondsToSelector:method)//返回值是YES/NO
如果是YES,则调用[p performSelector:method];


带三个参数的做法:写成一段字符串,然后通过string的方法分割开,再用数组存起来,再输出出来

NSString *str=[NSString stringWithFormat:@"%@:%@:%d",name,sex,age];

p=[ performSelector:@selector(show:)withObject:str];

NSArray *array=[p componentSeparatedByString;@":"];

SEL s2=@selector(showmsg:);
        if ([new respondsToSelector:s2]) {
            NSString *str=[NSString stringWithFormat:@"%@:%i:%f",new._name,new._age,new._height];
            [new performSelector:s2 withObject:str];
            
        }
-(void)showmsg:(id)msg{
    NSArray *array=[msg componentsSeparatedByString:@":"];
    
    NSLog(@"%@ %@ %@",array[0],array[1],array[2]);
}

将字符串转换成SEL:用处:输入通过转换的字符串来调用方法

SEL strss=NSSelectorFromString(@"show");

然后perfomSelector strss 来调用方法

 NSString *new=@"show";

[p performSelector:NSSelectorFromString(new)];



分类(oc类的扩展):  在原本的类下添加新的方法,不需要知道原来类的源代码,而且分类用于联合开发更加方便。

分类中不能定义属性,可以被继承,如果写的方法类中原本就有就会导致原本的类中的方法不能使用,分类中的方法优先级更高

@interface  原始类名(分类名)

添加新的方法声明

@end

@implemention   原始类名(分类名)

  添加新方法实现

@end

特点: 1、分类不能添加成员变量,可以给已有的类添加新的成员方法

    2、分类的分类方法可以被继承

    3、一个类可以分开多个人一起开发(联合开发)

    4、分类方法与原始类方法同名,分类方法会覆盖原始类方法(NSObject)

            5、分类中方法的调用是根据最后哪个执行来调用。



比较常用的数据格式化。

    //格式化输出字符
    NSString *str=[NSString stringWithFormat:@"[%@]",self];
    NSLog(@"%@",str);
    //输出后的是[字符串],相当于加上一个[];


功能分类:在.h文件中实现声明分类,在.m文件中的@ implemention实现方法

类的私有方法:在.m文件中声明分类,在@implenemtion实现方法,但是调用只能通过对象方法中用[self 方法名]来调用。

设计一个学生类,(学生会--考勤,检查寝室,发通知,组织活动) 党支部---党会,好人好事,上党课   班干部---开班会,收作业,叫起床,管理班费

用sel来实现指向学生会一切工作,类设计是包含构造方法









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值