实例变量和方法 (Object-C语言)

实例变量和方法

 

        实例变量的可见度(类的内部, 类的外部) 

        1.public: 公共的, 公开的 

        外部访问: 通过指向操作访问 

        访问格式: 对象->实例变量名 

        内部访问: 通过实例变量名访问

        面向对象编程特性: 封装, 继承, 多态

        封装的标准: 高内聚, 低耦合

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

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

        封装的好处: 把实现部分隐藏起来, 只暴露接口部分, 你只需要了解接口部分, 就能够使用, 根本不需要关心实现部分

        : public和封装的思想相违背, 一般不使用

         2.protected: 受保护的

        类的外部: 是不允许访问的, 通过方法间接访问

        Girl.h

@interface Girl : NSObject {
    //实例变量的修饰词的作用范围: 从当前修饰词开始, 到下一个修饰词或大括号}结束
    @public
    NSString *_name;//姓名
    @protected//默认
    NSInteger _age;//年龄
    NSString *_color;//肤色
    @private
    CGFloat _height;//身高
}

赋值(setter, 设置器)

1.-号方法

2.返回值void

3.方法名 set+实例变量名 (: 实例变量名不带下划线)

4.赋值有参数, 参数的数据类型与实例变量的数据类型保持一致

 - (void)setAge:(NSInteger)age;  

取值(getter, 访问器)

1.-号方法

2.返回值类型与实例变量的数据类型保持一致

3.方法名实例变量名 (: 实例变量名不带下划线)

4.没有参数

  - (NSInteger)age; 

Girl.m

- (void)setAge:(NSInteger)age {
    _age = age;
}

- (NSInteger)age {
    return  _age;
}

main.m

  [girl setAge:20];//赋值 NSLog(@"%ld", [girl age]); 

   3.private: 私有的, 当前的实例变量不被子类所继承    

    类的外部: 是不允许访问的, 通过方法间接访问

 Girl.h

 - (void)setHeight:(CGFloat)height;//方法名: setHeight: - (CGFloat)height; 

Girl.m

- (void)setHeight:(CGFloat)height {
    _height = height;
}

- (CGFloat)height {
    return _height;
}

main.m

 [girl setHeight:1.68];
 NSLog(@"%.2lfm", [girl height]);
 //内部访问: 通过实例变量名访问

   方法(函数)

        +: 类方法, 由类调用, 类方法内部不能够访问实例变量

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

如何判断方法是不是同一个方法

1.- / +

2.方法名

如何找到方法名

1.去掉- / +, 返回值类型, 参数类型, 参数名

2.冒号也是方法名一部分

 

无参数

格式:

 -/+ (返回值类型)方法名;

 *.h

- (void)sayHi;
+ (void)sayHi;

*.m

- (void)sayHi {
    NSLog(@"Hello, 我是%@", _name);
}

+ (void)sayHi {
    NSLog(@"Hello");
}

main.m

Girl *girl = [[Girl alloc] init];
[girl sayHi];
[Girl sayHi];

一个参数

格式:

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

*.h
- (void)sayHiToSomebody:(NSString *)name; + (void)sayHiToSomebody:(NSString *)name;
*.m
- (void)sayHiToSomebody:(NSString *)name { NSLog(@"%@向%@打招呼", _name, name); } + (void)sayHiToSomebody:(NSString *)name { NSLog(@"向%@打招呼", name); }
main.m
[girl sayHiToSomebody:@"男?脚"]; [Girl sayHiToSomebody:@"?"];

多个参数

格式

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

: 有几个参数就有几个冒号

.h
//
方法名 say:count: - (void)say:(NSString *)content count:(NSInteger)number; + (void)say:(NSString *)content count:(NSInteger)number;
.m
- (void)say:(NSString *)content count:(NSInteger)number { NSLog(@"说%ld次\"%@\"", number, content); } + (void)say:(NSString *)content count:(NSInteger)number { NSLog(@"说%ld次\"%@\"", number, content); }
main.m
[girl say:@"辉哥真帅" count:100]; [Girl say:@"辉哥真帅" count:NSIntegerMax];

  定义一个类

        OC中调用方法, 实质是发送消息

        [消息接受者消息] [obj message]

 

.h
//
特征: 颜色, 品牌, 价格(受保护的) //行为: 写字, 画画 @interface Pen : NSObject { NSString *_color; NSString *_brand; CGFloat _price; } - (void)setColor:(NSString *)color; - (NSString *)color; - (void)setBrand:(NSString *)brand; - (NSString *)brand; - (void)setPrice:(CGFloat)price; - (CGFloat)price; - (void)write:(NSString *)content; + (void)drawing:(NSString *)content; @end
.m
@implementation Pen
- (void)setColor:(NSString *)color { _color = color; } - (NSString *)color { return _color; } - (void)setBrand:(NSString *)brand { _brand = brand; } - (NSString *)brand { return _brand; } - (void)setPrice:(CGFloat)price { _price = price; } - (CGFloat)price { return _price; } - (void)write:(NSString *)content { NSLog(@"写%@", content); } + (void)drawing:(NSString *)content { NSLog(@"画%@", content); } @end
 main.m 
Pen *pen = [[Pen alloc] init]; [pen setColor:@"黑色"]; [pen setBrand:@"中华"]; [pen setPrice:12]; NSLog(@"%@ %@ %.2lf", [pen color], [pen brand], [pen price]); [pen write:@"作文"]; [Pen drawing:@"??"];

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

1.#include #import的区别(引入次数)

#include使用几次, 就引入几次

#import使用多次, 只引入一次

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

#import是真实引入了头文件

@class只是告诉编译器这是一个类, 没有引入头文件

 

#import "Man.h"会导致循环引入头文件

 使用@class告诉编译器, Man是一个类

 

        男人 女人 家庭

        男人类

        特征: 妻子(女人类)

        女人类

        特征: 丈夫(男人类)  

        家庭

        特征: 妻子(女人类) 丈夫(男人类)

 男人类

Man.h
@class Woman; @interface Man : NSObject { NSString
*_name;//姓名 Woman *_wife;//妻子 } - (void)setName:(NSString *)name; - (NSString *)name; - (void)setWife:(Woman *)wife; - (Woman *)wife; @end
Man.m
#import "Man.h"
#import "Woman.h"

@implementation Man

- (void)setName:(NSString *)name {
    _name = name;
}

- (NSString *)name {
    return _name;
}

- (void)setWife:(Woman *)wife {
    _wife = wife;
}
- (Woman *)wife {
    return _wife;
}

@end

女人类

Woman.h
@class Man;
//一般@class要配合#import使用, 避免出现循环引入头文件, 在.h中使用@class, 在.m中使用#import @interface Woman : NSObject { NSString *_name;//姓名 Man *_husband;//丈夫 } - (void)setName:(NSString *)name; - (NSString *)name; - (void)setHusband:(Man *)husband; - (Man *)husband; @end
Woman.m
#import "Woman.h" #import "Man.h" @implementation Woman - (void)setName:(NSString *)name { _name = name; } - (NSString *)name { return _name; } - (void)setHusband:(Man *)husband { _husband = husband; } - (Man *)husband { return _husband; } @end

家庭

Family.h
@class Man, Woman; @interface Family : NSObject { Man
*_husband;//丈夫 Woman *_wife;//妻子 } - (void)setHusband:(Man *)husband; - (Man *)husband; - (void)setWife:(Woman *)wife; - (Woman *)wife; @end
Family.m
#import "Family.h" #import "Woman.h" #import "Man.h" @implementation Family - (void)setHusband:(Man *)husband { _husband = husband; } - (Man *)husband { return _husband; } - (void)setWife:(Woman *)wife { _wife = wife; } - (Woman *)wife { return _wife; } @end
main.m
//有一天, 一个男人从天而降 Man *xiaoming = [[Man alloc] init]; [xiaoming setName:@"小明"]; //也许是命中注定, 一不"小心", 撞倒了她(一个女人) Woman *xiaohua = [[Woman alloc] init]; [xiaohua setName:@"小花"]; //她并没有生气, 相反的, 告诉他:"你是我的人了" //他们相互对视, 长相厮守 [xiaoming setWife:xiaohua]; [xiaohua setHusband:xiaoming]; //组建了家庭, 从此过上了幸福的生活 Family *family = [[Family alloc] init]; [family setHusband:xiaoming]; [family setWife:xiaohua]; //如何找到男人的名字 NSString *name = [xiaoming name]; NSLog(@"%@", name); name = [[xiaohua husband] name]; // Man *man = [xiaohua husband]; // name = [man name]; NSLog(@"%@", name); name = [[family husband] name]; NSLog(@"%@", name); name = [[[family wife] husband] name]; NSLog(@"%@", name);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/OrangesChen/p/4847257.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值