OC学习-02-可见度和方法

实例变量可见度

可见度:

可见度 特点
public(公有的) 在类的内外部都可以操作
protected(系统默认,受保护的) 只能在类和子类中操作
private(私有的) 只能在该类内访问
{
    @public
    NSString *_perName;
    NSString *_perSex;
    @protected
    NSInteger _perAge;
    @private
    NSString *_perHobby;
}
  • 一般不使用@public,原因如下

    • 容易暴漏类内部的细节
    • 不符合”封装的特性”

方法

方法分类

OC中的方法可以分为两种

  • 类方法 如:+(id)alloc
  • 实例方法 如:-(void)sayHi

注意:类方法中不能使用实例变量,且只能类使用. 实例方法只能对象使用

 - (void) setStuName:(NSString *) stuName

其中

  • “-“为方法类型表示符,类方法为”+”
  • (void)为返回类型
  • setStuName为参数形容词
  • (NSString *)为参数的类型
  • stuName 为参数名

方法名就是方法语句去掉类型表示,返回类型,参数类型,参数名以及空格所剩的部分

即为setStuName:

注意:类中不能出现同名方法.”:”为标示参数,不可以省略,有冒号必须有参数

setter,getter

对实例变量赋值或者取值的时候使用

赋值方法:setter,为设置器

读取实例变量值的方法:getter,为访问器

赋值语句:当对多个语句进行操作的时候,称为赋值语句

Person.h

// 设置器
- (void) setPerName:(NSString *)perName
{
    _perName = perName;
}
// 访问器
- (NSString *)perName
{
    return _perName;
}
// 赋值语句
- (void) setPerName:(NSString *)perName
          setPerSex:(NSString *)perHobby;

Person.m

// 设置器
- (void) setPerName:(NSString *)perName
{
    _perName = perName;
}
// 访问器
- (NSString *)perName
{
    return _perName;
}
// 赋值语句
- (void) setPerName:(NSString *)perName
          setPerSex:(NSString *)perHobby;
{
    _perName = perName;
    _perHobby= perHobby;
}

注意

  • 如果写声明但是没实现,会在.m文件中出现警告,告诉我们应该把方法补全
  • 无论setter 还是 getter 的内部操作的是实例变量
  • 每一个实例变量都需要一对的setter和getter方法

方法使用

当我们想调用方法时,使用

[person sayHi]

即为消息机制,对应的就是

[消息的接收者 具体要做的事]

自定义初始化方法

  • -(id)init 一般的初始化方法只能给变量设置默认值,不灵活
  • -(id)initWithName: 自定义初始化方法,可以根据需求来定义

.h

- (id) initWithPerName:(NSString *)perName
                perSex:(NSString *)perSex;

.m

- (id) initWithPerName:(NSString *)perName
                perSex:(NSString *)perSex;
{
    _perName = perName;
    _perSex = perSex;
    return self;
}

#import

作用:导入头文件的内容到当前的类

其中

  • #import “xxx.h” 导入自定义的类
  • #import <>导入类库中的头文件

注意:用import引入头文件容易引起交叉导入,导致错误

所以这时候应该使用@class ,用@class可以防止交叉引入头文件的问题,系统会把A当做是一个已经存在的类来使用,不会把A.h的内容进行拷贝,就是用了一下A的名,其他不做任何的检测

代码练习

main.m

    // 创建一个对象
//    Student *stu = [[Student alloc] init];
//    [stu sayHi];
//    Student *stu = [[Student alloc] init];
//    [stu setStuName:@"商帅" setStuAge:24 setStuHobby:@"UNIQLO" setStuScore:80  setStuSex:@"女" ];
//    [stu sayHi];
//
//    [stu setStuName:@"abc"];

//    NSLog(@"%@",[stu stuName]);

//    // 车
//    AudiCar *car = [[AudiCar alloc] init];
//    // 赋值语句
//    [car setCarBrand:@"A8" setCarPrice:@"100w" setCarSpeed:300];
//    [car sayHi];
//    // setter getter
//    [car setCarBrand:@"A6"];
//    [car setCarPrice:@"60w"];
//    [car setCarSpeed:200];
//    NSLog(@"型号%@",[car carBrand]);
//    [car sayHi];

//    Student *stu = [[Student alloc] initWithStuName:@"商帅" stuAge:24 stuScore:80 stuSex:@"男" stuHobby:@"比美"];
//    [stu sayHi];
//
//    AudiCar *car = [[AudiCar alloc] initWithCarBrand:@"A4" carPrice:@"30w" carSpeed:200];
//    [car sayHi];

AudiCar.h

@interface AudiCar : NSObject

// 三个成员变量,默认可见度
{
    NSString *_carBrand;
    NSString *_carPrice;
    CGFloat _carSpeed;
}
- (void) sayHi;
// 对三个成员变量进行统一赋值的赋值语句
- (void) setCarBrand:(NSString *)carBrand
         setCarPrice:(NSString *)carPrice
         setCarSpeed:(CGFloat)carSpeed;
// 三个成员变量的设置器
- (void) setCarBrand:(NSString *)carBrand;
- (void) setCarPrice:(NSString *)carPrice;
- (void) setCarSpeed:(NSInteger)carSpeed;
// 访问器
- (NSString *) carBrand;
- (NSString *) carPrice;
- (NSInteger) carSpeed;

// 自定义初始化方法
- (id) initWithCarBrand:(NSString *)carBrand
               carPrice:(NSString *)carPrice
               carSpeed:(CGFloat)carSpeed;
@end

AudiCar.m

@implementation AudiCar
- (void) sayHi
{
    NSLog(@"型号%@,价格%@,速度%g",_carBrand,_carPrice,_carSpeed);
}

// 对三个成员变量进行统一赋值的赋值语句
- (void) setCarBrand:(NSString *)carBrand
         setCarPrice:(NSString *)carPrice
         setCarSpeed:(CGFloat)carSpeed;
{
    _carBrand = carBrand;
    _carPrice = carPrice;
    _carSpeed = carSpeed;
}
// 三个成员变量的设置器
- (void) setCarBrand:(NSString *)carBrand
{
    _carBrand = carBrand;
}
- (void) setCarPrice:(NSString *)carPrice
{
    _carPrice = carPrice;
}
- (void) setCarSpeed:(NSInteger)carSpeed
{
    _carSpeed = carSpeed;
}
// 访问器
- (NSString *) carBrand
{
    return _carBrand;
}
- (NSString *) carPrice
{
    return _carPrice;
}
- (NSInteger) carSpeed
{
    return _carSpeed;
}

- (id) init
{
    _carSpeed = 200;
    _carPrice = @"100w";
    _carBrand = @"R8";
    return self;
}

- (id) initWithCarBrand:(NSString *)carBrand
               carPrice:(NSString *)carPrice
               carSpeed:(CGFloat)carSpeed;
{
    _carBrand = carBrand;
    _carSpeed = carSpeed;
    _carPrice = carPrice;
    return self;
}

@end

Student.h

@interface Student : NSObject
{
@public
    NSString *_stuName;
    NSString *_stuSex;
@private
    NSString *_stuHobby;
    NSInteger _stuAge;
@protected
    CGFloat _stuScore;
}

- (void) sayHi;
- (void) eat;
- (void) play;

// 对所有成员变量的赋值语句
- (void) setStuName:(NSString *) stuname
            setStuAge:(NSInteger)stuAge
            setStuHobby:(NSString *) stuHobby
            setStuScore:(CGFloat) stuScore
            setStuSex:(NSString *) stuSex;

// 设置器
- (void) setStuName:(NSString *)stuName;
- (void) setStuAge:(NSInteger)stuAge;
- (void) setStuSex:(NSString *)stuSex;
- (void) setStuScore:(CGFloat)stuScore;
- (void) setStuHobby:(NSString *)stuHobby;

// 访问器
-(NSString *)stuName;
-(NSInteger)stuAge;
-(NSString *)stuSex;
-(CGFloat)stuScore;
-(NSString *)stuHobby;

// 自定义的初始化方法
- (id) initWithStuName:(NSString *)stuName
                stuAge:(NSInteger)stuAge
              stuScore:(CGFloat)stuScore
                stuSex:(NSString *)stuSex
              stuHobby:(NSString *)stuHobby;
@end

Student.m

@implementation Student
- (void) sayHi
{
    NSLog(@"姓名:%@,爱好:%@,性别:%@,岁数:%ld,成绩:%g",_stuName,_stuHobby,_stuSex,_stuAge,_stuScore);
}
- (void) eat
{
    NSLog(@"吃饭");
}
- (void) play
{
    NSLog(@"要玩");
}

- (void) setStuName:(NSString *) stuname
            setStuAge:(NSInteger)stuAge
            setStuHobby:(NSString *) stuHobby
            setStuScore:(CGFloat) stuScore
            setStuSex:(NSString *) stuSex;
{
    _stuName = stuname;
    _stuAge = stuAge;
    _stuHobby = stuHobby;
    _stuScore = stuScore;
    _stuSex = stuSex;
}

// 设置器
- (void) setStuName:(NSString *)stuName
{
    _stuName = stuName;
}
- (void) setStuAge:(NSInteger)stuAge
{
    _stuAge = stuAge;
}
- (void) setStuSex:(NSString *)stuSex
{
    _stuSex = stuSex;
}
- (void) setStuScore:(CGFloat)stuScore
{
    _stuScore = stuScore;
}
- (void) setStuHobby:(NSString *)stuHobby
{
    _stuHobby = stuHobby;
}

// 访问器
-(NSString *)stuName
{
    return _stuName;
}
-(NSInteger)stuAge
{
    return _stuAge;
}
-(NSString *)stuSex
{
    return _stuSex;
}
-(CGFloat)stuScore
{
    return _stuScore;
}
-(NSString *)stuHobby
{
    return _stuHobby;
}

// 初始化
- (id) init
{
    _stuName = @"张三";
    _stuSex = @"男";
    _stuHobby = @"女";
    _stuScore = 100;
    _stuAge = 20;
    return self;
}
- (id) initWithStuName:(NSString *)stuName
                stuAge:(NSInteger)stuAge
              stuScore:(CGFloat)stuScore
                stuSex:(NSString *)stuSex
              stuHobby:(NSString *)stuHobby;
{
    _stuName = stuName;
    _stuHobby = stuHobby;
    _stuAge = stuAge;
    _stuScore = stuScore;
    _stuSex = stuSex;
    return self;
}
@end

于7月16学习,总结于7月18

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 18:40:32

OC学习-02-可见度和方法的相关文章

黑马程序员-OC学习日记-对象与方法、对象与函数

------- ios培训. android培训.java培训.期待与您交流! ---------- 一.NSString类简介 1.NSString是OC中用来表示字符串的一个类 2.NSString类创建 (1)通过字面量方式创建 NSString * str = @"要努力学习!"; (2)通过对象方法创建 NSString * str1 = [NSString alloc]; str1 = [str1 initWithUTF8String:"今天雾霾好大!"

Oc(实例变量可见度与方法)(InstanceVariableAndMethod)

main函数 // //  main.m //  2-3 LessionInstanceVariableAndMethod // //  Created by lanouhn on 15/2/3. //  Copyright (c) 2015年 lanouhn. All rights reserved. // #import <Foundation/Foundation.h> #import "Boy.h" #import "MobilePhone.h"

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来

ThinkPhp学习02

原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controller 编写类文件(UserAction.class.php)二.ThinkPHP的MVC特点        三.ThinkPHP的MVC对应的目录    M 项目目录/应用目录/Lib/Model V 项目目录/应用目录/Tpl C 项目目录/应用目录/Lib/Action四.url访问C     

OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

(转载)OC学习篇之[email&#160;protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性,今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用 在来看一下OC中的关键字@class的作用,在

OC学习总结之面向对象和类

OC学习总结之面向对象和类 Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象,简称OOP,它是以事物为中心,参与事件的事物是核心,完成事件只是事物的一个小任务.面向过程,简称OPP,它是以事件为中心,事件是核心,列出了完成事件的每一个步骤,一步一步完成.也就是面向对象侧重于从问题在寻找客体.客体的作用.客体间的关系即“谁”.“做什么”.“怎么做”,面向过程侧重于问题的分解即“事

黑马程序员-OC学习笔记之NSString与NSMutableString

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSString与NSMutableString 相信大家对NSString类都不陌生,它是OC中提供的字符串类,它的对象中的字符串都是不可变的,而它的子类NSMutableString类的对象中的字符串就是可变的.什么是可变与不可变呢?二者的区别就是在已经创建的一个字符串对象中,在程序中能不能更改字符串,比如拼接新的字符串,可变的可以在原字符串中更改,