OC第二讲(InstanceVariableAndMethod实例变量和方法)

main.m文件里:

一:1.

面向对象的三大特性:  封装, 继承, 多态

    封装高内聚低耦合

    内聚: 模块内部成员的关联程度

    耦合: 模块之间的关联程度


例:Girl *girl = [[Girl alloc] init];​


​2.//实例变量的可见度

    1).public , 公用的, 公开的, 可以在类的内部和外部进行访问

    内部访问:实例变量名

    外部访问:对象->实例变量名

    注:public用的比较少,因为和封装的思想相违背

例:​girl->name = @"貂蝉";//赋值

    NSLog(@"%@", girl->name);//访问

    2).protected(默认值),受保护的,不允许在外部访问,可以在类和子类的内部进行访问

    

    内部访问: 实例变量名

    外部访问: 通过方法(设置器  和  访问器)访问

    [girl setAge:888];//赋值

    NSLog(@"%ld",[girl age]);//访问

 //通过点语法调用设置器和访问器

    girl.age = 888;

    NSLog(@"%ld",girl.age);

    //注:a.点语法出现在=(赋值运算符)的左侧,调用的是设置器,其他位置都是访问器

    //b.点语法的前提:  写了设置器和访问器

    

    [girl setGender:@"女"];

    NSLog(@"%@",[girl gender]);

    

    3).private,私有的,外部不允许访问, 内部可以访问,子类不能访问

    

    内部访问:  实例变量名

    外部访问:  设置器和访问器

    

    [girl setHeight:12.415];

    NSLog(@"%lf",[girl height]);

    

    girl.height = 12.4556;

    NSLog(@"%lf",girl.height);

        二:方法(函数)

    

    1.方法的分类

    +: 类方法, 由类名调用

    -: 实例方法, 由对象调用

    //注: 类方法内部不能够访问实例变

    

    2.无参数

    //格式:

    +/-(void)方法名;

    

    [girl sayHello];

    [Girl sayHi];

    

    3.一个参数

    //格式:

    +/-(返回值数据类型)方法名:(参数数据类型)参数名

    [girl sayHello:@"灰机"];

    [Girl sayHi:@"小灰灰"];

    

    

    4.多个参数

    格式:

    +/- (返回值数据类型)方法名1:(数据类型1)参数1  方法名2:(数据类型2)参数2 方法名3:(数据类型3)参数名3...

    [girl sayHello:@"王尼玛"withCount:5];

    [GirlsayHi:@"王你妹"withCount:6];

    

    

   三:初始化方法

    1.为实例变量赋初值

    Girl *girl1 = [[Girl alloc] init];

    NSLog(@"name:%@, age:%ld, gender:%@, height:%.2f",girl1->name, girl1.age, girl1.gender, girl1.height);

    

    例:定义一个苹果类

    //实例变量: 颜色, 重量, 价格, 都是protected

    //并且颜色默认为红色,  价格默认为10, 重量默认为0.5

    

    Apple *apple = [[Apple alloc] init];

    

    NSLog(@"color:%@, price:%.2lf, weight: %.2lf",apple.color,apple.price,apple.weight);//需要访问器

    

    [apple eat];

    

    apple.color = @"白色";//需要设置器

    

    NSLog(@"%@",apple.color);

    

    //自定义初始化方法

    

    //Apple *apple1 = [[Apple alloc]initWithColor:@"黑色" price:1 weight:100];

    

    四:便利构造器

    //作用: 把开辟内存, 初始化, 对实例变量赋值结合在一起

    // Apple *apple2 = [Apple appleWithColor:@"绿色" price:1 weight:100];

    Girl.h文件里面:

一:​@interface Girl : NSObject{

@public

    //实例变量

    NSString *name;//姓名

@protected

    NSInteger age;//年龄

    NSString *gender;//性别

@private

    CGFloat height;//身高

}

//判断方法是否相同

//1.+/-

//2.方法名

- (void)sayHello;

+ (void)sayHi;

//冒号是方法名的一部分

//方法名sayHello:

- (void)sayHello:(NSString *)aName;

+ (void)sayHi:(NSString *)aName;

//方法名sayHello:withCount:

//注:多个参数的方法是分段的, 每段之间加空格, 每段方法名都是小驼峰法

- (void)sayHello:(NSString *)aName withCount:(NSInteger)aCount;

+ (void)sayHi:(NSString *)aName withCount:(NSInteger)aCount;

//sayHello:

//- (void)sayHello:(NSString *)aName :(NSInteger)aCount;

//::

//- (void):(NSString *)aName :(NSInteger)aCount;

//赋值方法(setter, 设置器)

//-(void)set + 实例变量名:(实例变量的数据类型)a + 实例变量名

- (void)setAge:(NSInteger )aAge;

//访问方法(getter, 访问器)

//-(实例变量的数据类型)实例变量名

- (NSInteger)age;

- (void)setGender:(NSString *)aGender;

- (NSString *)gender;

- (void) setHeight:(CGFloat )aHeight;

- (CGFloat)height;

三:

GIirl.m文件里​:

@implementation Girl

//初始化方法

//1.实例方法 , 因为内部要求对实例变量进行赋值

//2.返回值类型id: void *,代指 所有对象类型

//3.不需要写声明, 因为系统已经声明过了

//4.最后一定要加上return self, 固定写法

//重写系统init

-(id)init {

    gender = @"男";

    name = @"阿三";

    age = 18 ;

    height = 5448;

    returnself;

}

-(void)sayHello{

    NSLog(@"你好,我叫%@",name);

}

+ (void)sayHi{

    NSLog(@"Hi!我 是 ");

    }

- (void)sayHello:(NSString *)aName{

        NSLog(@"Hi! %@",aName);

}

+ (void)sayHi:(NSString *)aName{

       NSLog(@"Hi! %@",aName);

}

- (void)sayHello:(NSString *)aName withCount:(NSInteger)aCount{

    

    for (NSInteger i = 0; i < aCount; i++) {

        NSLog(@"Hi  %@,我叫%@",aName,name);

    }

    }

+ (void)sayHi:(NSString *)aName withCount:(NSInteger)aCount{

    for (NSInteger i = 0; i

        NSLog(@"Hi   %@",aName);

    }

}

-(void)setAge:(NSInteger )aAge{

    age = aAge;//设置给当前对象的属性

}

- (NSInteger)age{

    returnage;//访问当前对象的属性

}

- (void)setGender:(NSString *)aGender{

    gender = aGender;

}

- (NSString *)gender{

    return gender;

}

- (void) setHeight:(CGFloat )aHeight{

    height = aHeight;

}

- (CGFloat)height{

    return height;

}

​四:

Apple.h文件里:

@interface Apple : NSObject{

    

@protected

    NSString *color;

    CGFloat weight;

    CGFloat price;

    

}



//自定义初始化方法

- (id)initWithColor:(NSString *)aColor price:(CGFloat)aPrice weight:(CGFloat)aWeight;


//便利构造器


+ (id)appleWithColor:(NSString *)aColor price:(CGFloat)aPrice weight:(CGFloat)aWeight;



-(void)setColor:(NSString *)aColor;//(设置器)

-(NSString *)color;//(访问器)


-(void)setWeight:(CGFloat)aWeight;

-(CGFloat)weight;


-(void)setPrice:(CGFloat)aPrice;

-(CGFloat)price;


-(void)eat;

五:
Apple.m文件里:

@implementation Apple


- (id)init{

    color = @"红色";

    price = 10;

    weight = 0.5;

    return self;

}

- (void)setColor:(NSString *)aColor{

    color = aColor;

}

- (NSString *)color{

    return color;

}

- (void)setWeight:(CGFloat)aWeight{

    weight = aWeight;

}

- (CGFloat)weight{

    return weight;

}

- (void)setPrice:(CGFloat)aPrice{

    price = aPrice;

}

- (CGFloat)price{

    return price;

}


- (void)eat{

    NSLog(@"哈哈,苹果苹果,好吃不贵,经济实惠,不好吃不要钱了");

}

六:man.h文件里:

注:有一道常见的面试题:!!!!!!

//#import "Woman.h"

//面试题

//#include,#import,@class的区别

//1.#include与#import的区别(去重)

//2.#import与@class的区别(是否真实引入头文件)

//#import真实的引入了头文件, @class没有真实的引入头文件,只是告诉编译器,这是一个类;  一般来说@class配合#improt进行使用

//为了防止循环引入头文件,我们在*.h中使用@class, 在*.m中使用#import

//告诉编译器Woman是一个类

@classWoman, Boy;

//@class Boy;

@interface Man : NSObject{

    NSString *name;

    NSInteger age;

    NSString *gender;

    Woman *wife;

    Boy *son;

}

-(void)setWife:(Woman *)aWife;

-(void)setSon:(Boy *)aBoy;

七:man.m文件里:

#import "Man.h"

#import "Woman.h"

#import "Boy.h"

@implementation Man

-(void)setWife:(Woman *)aWife{

        wife = aWife;

}

-(void)setSon:(Boy *)aSon{

    son = aSon;

}

@end

八:Woman.h文件里:

#import

@classMan,Boy;

@interface Woman : NSObject{

    NSString *name;

    NSInteger age;

    NSString *gender;

    Man *husband;

    Boy *son;

}

- (void)setHusband:(Man *)aHusband;

- (void)setSon:(Boy *)aSon;

@end

九:Woman.m文件里:

#import "Woman.h"

#import "Man.h"

#import "Boy.h"

@implementation Woman

- (void)setHusband:(Man *)aHusband{

    husband = aHusband;

}

- (void)setSon:(Boy *)aSon{

    son = aSon;

}

@end

十:Boy.h文件里:

#import

@class Man, Woman;

@interface Boy : NSObject{

    NSString *name;

    NSInteger age;

    NSString *gender;

    Man *father;

    Woman *mother;

    

}


- (void)setFather:(Man *)aFather;

- (void)setMother:(Woman *)aMother;


@end





十一:Boy.m文件里:

#import "Boy.h"

#import "Woman.h"

#import "Man.h"


@implementation Boy

- (void)setFather:(Man *)aFather{

    

    

    

    father = aFather;

    

}

- (void)setMother:(Woman *)aMother{

    

    

    mother = aMother;

    

}



@end



十二:Family.h文件里:

@class Man, Woman, Boy;

@interface Family : NSObject{

    Man *father;

    Woman *mother;

    Boy *son;

    

    

}


-(void)setFather:(Man *)aFather;

-(void)setMother:(Woman *)aMother;

-(void)setSon:(Boy *)aSon;





 

@end


十三: Family.m文件里:

#import "Family.h"

#import "Woman.h"

#import "Man.h"

#import "Boy.h"


@implementation Family


-(void)setFather:(Man *)aFather{

    

    

    

    

    

    father = aFather;

    

}






-(void)setMother:(Woman *)aMother{

    

    mother =aMother;

}

-(void)setSon:(Boy *)aSon{

    son = aSon;

    

}


@end



OC第二讲结束...看不懂的,想要完整可见的,,私聊发给你

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值