您的位置:首页 > 其它

OC学习过程中的一些总结

2015-11-06 21:06 253 查看
setter存在的意义:

作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值

成员变量: int _age设置set方法

- (void)setAge :(int)age;参数类型和setAge之间空一格,(int)和age之间空一格

- (void) setAge : (int) age ; 

setter:

1.数据安全性

2.数据过滤

getter方法:

获取成员变量

必须有返回值,返回值类型和成员变量类型一致
没有参数

点语法一般给成员变量赋值,如果不是给成员变量赋值,一般不建议使用,但是也可以使用

成员变量 int _age 的getter

- (int) age;

点语法:

点语法是相对于setter和getter来说的

当点语法使用在 “=“赋值符号左侧的时候,点语法会被展开为setter方法的调用,其他情况(等号右侧、直接使用)为点语法展开为getter方法的调用

点语法的本质就是调用setter和getter,点语法的本质是方法调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法进行调用,

如果没有setter和getter,则不能使用点语法

不要在setter和getter中使用本属性的点语法
- (void) setAge:(int)age {

    // 下面的代码会引发死循环

    self.age = age;

        //编译器展开后 [self setAge:age]

}

- (int) age {

    // 下面的代码会引发死循环

    return self.age;

          // 编译器展开后 [self   age]

}

self在类方法中的表现:

在类方法中可以通过self来调用本类中的其他的类方法
不能在类方法中去调用对象方法或访问成员变量,因为对象方法与成员变量都是属于具体的实例对象的。

self在对象方法中的表现:

在对象方法中,可以通过self来调用本对象上的其他方法
在对象方法中,可以通过self来访问成员变量,不能用self调用本类的类方法

上面两个的代码体现
+ (void)carameWithFlahlightStatus:(FlahlightStatus)status//这是一个类方法,所以,能调用这个函数的只能是一个类,所以下面的self只能代表类,后面之所以openFlahlight方法和closeFlahlight方法都是类方法,就一目了然了,如果是对象方法的话,就违背了

    //不能在类方法中去调用对象方法或访问成员变量,因为对象方法与成员变量都是属于具体的实例对象的。

{

    if (status ==kFlahlightStatusOpen)
{
//        [Iphone openFlahlight];

        //其实在类方法中调用类方法除了可以使用类名调用以外,还可以使用self来调用

        [selfopenFlahlight];

    }else

    {
//        [Iphone closeFlahlight];

        // self == Iphone

        [selfcloseFlahlight];

    }

    NSLog(@"拍照");

   

}

+ (void)openFlahlight

{

    NSLog(@"打开闪光灯");

}

+ (void)closeFlahlight

{

    NSLog(@"关闭闪光灯");
}

全局变量,成员变量,局部变量

如果在— 对象方法中出现与成员变量同名的局部变量,如果此时想使用该成员变量可以通过self->成员变量名的方式

self和函数没关系,只和方法能产生关系

self只能在方法中使用;不要使用self来调用函数,也不可以在函数内部使用self;

使用self调用本方法,产生死循环
+ (void)openFlahlight

{

    NSLog(@"打开闪光灯");
//    NSLog(@"self = %p", self);
   
// 死循环
    [selfopenFlahlight];//
死循环
}

self的使用场景
使用场景:

 可以用于在对象方法之间进行相互调用

 可以用于在类方法之间进行相互调用

 
 可以用于区分成员变量和局部变量同名的情况,用self->访问的就是成员变量,而不是局部变量

继承
基类的私有属性能被继承,不能在子类中访问
OC中的继承是单继承
子类父类方法重名,子类可以重写方法,调用的时候是使用子类的方法,如果想使用父类的方法,用super关键字
子类不能重复定义父类已经存在的成员变量,即使是父类私有的,子类私有的也不可以

super在类方法中,就会调用父类的类方法;在对象方法中就会调用父类的对象方法

多态(多态中必须要有继承)
很多动物都需要人来喂养,人类中不可能定义太多的真多不同动物的方法来接收动物,并且完成喂养的动作,这样,在人类里面直接定义动物类来接收,注意:
想要这个动物类能接收具体的动物,那么这些具体的动物都要继承动物类
代码:
主函数:
#import<Foundation/Foundation.h>

#import "Dog.h"

#import "Cat.h"

#import "Animal.h"

#import "Person.h"

#import "Pig.h"

int main(int
argc, constchar
* argv[]) {
Dog *d = [Dognew];

    Cat *c = [Catnew];

    Pig *p = [Pignew];//创建三个对象

   

    [Personfood:d];

    [Personfood:c];
    [Personfood:p];//人类调用类方法food,传入三个对象
return0;
}

Person.h
//  Person.h
//  day13
//
//  Created by xiaomage on 15/6/19.
//  Copyright (c) 2015年
xiaomage. All rights reserved.
//

#import<Foundation/Foundation.h>

#import "Dog.h"

#import "Cat.h"

@interface Person :NSObject

/*

+ (void)food:(Dog *)dog;

+ (void)foodCat:(Cat *)cat;

// 骆驼

// 狗熊

// 豹子

// 大象

// 猴子

// 鸡

// 猪

// 草泥马

// ...

 */

+ (void)food:(Animal
*)a;//只写一个方法,别的动物可以直接往里面塞了
@end

//  Person.m
//  day13
//
//  Created by xiaomage on 15/6/19.
//  Copyright (c) 2015年
xiaomage. All rights reserved.
//

#import"Person.h"

@implementation Person

+ (void)food:(Animal
*)a

{

    [a eat];

}
@end

//  Pig.h
//  day13
//
//  Created by xiaomage on 15/6/19.
//  Copyright (c) 2015年
xiaomage. All rights reserved.
//

#import<Foundation/Foundation.h>

#import "Animal.h"

@interface Pig :Animal

@end

//  Pig.m
//  day13
//
//  Created by xiaomage on 15/6/19.
//  Copyright (c) 2015年
xiaomage. All rights reserved.
//

#import"Pig.h"

@implementation Pig

- (void)eat

{

    NSLog(@"大口吃");

}
@end

注意:
   Animal *a1 = [Dog new];
    [a1 eat];//调用的是父类特有的方法
   

    // 注意点:在多态中,如果想调用子类特有的方法必须强制类型转换为子类才能调用
//    [a1 kanJia];
    Dog *d1 = (Dog *)a1;//强制类型转换
    [d1 kanJia];//这样就可以调用狗特有的方法

注意:
在多态中,父类可以访问子类特有的方法———— 强制类型转换
假设 子类 Dog 有一个特有的方法bark

[dog bark];

Animal *an2 = [Dog new];

[(Dog*)an2 bark]; //把父类的指针,强制类型转换
*如果不存在多态,也就是说父类子类之间没有继承关系,是不能这么操作的

实例变量的修饰符

1)@public (公开的)在有对象的前
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  封装 继承 多态 总结