OC语言笔记(四):OC点语法、继承、类别

    一、点语法

1、当用@property声明一个属性对象的时候,系统会为他自动制作一个_属性名称的成员变量

2、当我们用object.属性 = something,赋值的的时候,其实是再给_属性名的这个成员变量赋值

3、属性并没有得到值,当我们用object.属性 = something的时候,其实是在调用一个默认的setter方法,这个setter方法就给_属性名赋值了

4、当我们用object.属性取值时,取得是_属性名的值,这个时候.的作用起始是调用了一个默认的getter方法,这个getter方法就把_属性名的值取出来了

5、当我们调用点语法的时候,其实我们是在调用settergetter方法

6、属性property的修饰符,property和后面的属性之间的小括号里可以填写readonly,readWrite,nonatomic,atomic,setter,getter,assign,copy,retain

7nonatomic,atomi原子性或者非原子性,原子性表示线程安全,但是运行慢,非原子性non,运行快。IOS当不涉及到线程操作的时候,一般都选择non,因为快

8setter,getter,设置这个属性的setter方法和getter方法


//这里别加下划线

-(void)setMyAgeTo:(NSString*)newAge;

-(NSString*)getMyAge;


@synthesize age = _age,sex = _sex;

//目前可以不写这个,写这个目的,就是把age属性和_age成员变量进行关联


AnimalPoint *pp = [AnimalPoint alloc];

    pp.age = @"18";

    pp.sex = @"male";

    //上面两行是赋值

NSLog(@"%@,%@",pp.age,pp.sex);//这是取值



二、继承

继承的特点

   1、子类(DeskComputer)会拥有父类(Computer)的所有属性和方法

   2、子类可以新增属性和方法,但是新增的方法不会影响父类

   3、子类还可以修改(重写)父类的方法,重写后,子类再调用这个方法的时候,就会按照改后的方法来运行,但是不会影响父类

   4、同等级的子类之间没有互相的关系


三、类别

1、类别的作用,是当基础类的方法不能满足我们当前需求的时候,就为基础类建一个类别,从而实现为基础类对象增加额外方法的功能

2、类别中的方法,基础类的对象能调用

#import "First.h"

3、类别的.h文件 @interface 基础类名 (类别的名字)

@interface First (Second)


  First *first = [First alloc];

    [first read];

    [first write];

    [first look];

    //上面三个方法是First这个类本身就有的方法

    //下面两个方法是First+Second这个类别给First额外添加的方法

    [first sport];

    [first walk];


4、为可变数组添加排序类别

#import "NSMutableArray+Sort.h"


@implementation NSMutableArray (Sort)

-(NSArray*)mutableSort

{

    for(int i = 0;i<[self count]-1;i++)

    {

        for(int j = 0;j<[self count]-1;j++)

        {

            if([[self objectAtIndex:j] compare:[self objectAtIndex:j+1]] >0)

            {

                [self exchangeObjectAtIndex:j withObjectAtIndex:j+1];

            }

        }

    }

    return self;

}

@end

5、为不可变数组添加排序类别

-(NSArray*)unMuSort

{

    //先把self,赋值给一个mutableArray

//NSMutableArray *muArr = [NSMutableArray arrayWithCapacity:0];

//for(NSString *temp in self)

//{

//[muArr addObject:temp];

//}

    NSMutableArray *muArr = [NSMutableArray arrayWithArray:self];

    for(int i = 0;i<[muArr count]-1;i++)

    {

        for(int j = 0;j<[muArr count]-1;j++)

        {

            if([[muArr objectAtIndex:j] compare:[muArr objectAtIndex:j+1]] >0)

            {

                [muArr exchangeObjectAtIndex:j withObjectAtIndex:j+1];

            }

        }

    }

    

    return muArr;

}

@end





课后作业:


1、建一个类,这个类有两个成员变量,一个是_name,一个是_age,完成这两个变量的setter方法和getter方法


2、建一个类,这个类有两个属性,一个是name,一个是age


3、使用类别的方式,完成一个数组排序的功能(可变数组)


4、做一个人类,有一个属性“性别”,有一个方法“吃”,做一个子类,男人类,多一个属性“喉结”,多一个方法爱打架。


5、做一个Car类,做一个Benz类,做一个BYD类,Benz和BYD继承Car

Car有一个属性:NSString *price

有一个方法:-(void)run; 实现:nslog@“run”

Benz类 增加一个属性:NSString *type

修改 run方法为 nslog@“fast run”

BYD类 增加一个属性:NSString *color

修改run 方法为 nslog@“slow run”

增加一个方法,-(void)manHandle;nslog@“手动”


6、做NSString的类别,里面有几个方法

A、判断是否有http前缀,真则打印ok,假则打印fail

B、判断字符串内容,如果等于success,打印:成功,如果等于can’t find,打印:没有,如果等于fail,打印:失败

7、做NSArray的类别,里面有几个方法

A、向这个数组增加一个字符串的对象

B、比较一个数组是否与@[@“a”,@“b”,@“c”]完全一样,如果不一样,打印不一样的index

8、做字典的类别,里面有几个方法

A、获取字典的所有的key,遍历查找字典的所有value,判断每个value是不是字符串,如果是打印这个字符串,如果不是,判断是数组还是字典,如果是数组,打印:数组,如果是字典,打印:错误




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值