iOS语法篇-类的构造方法与设计

版权声明:允许自己一步一步成长,只要每天都有收获,不求多,只求吸收.交流QQ群:52795427 https://blog.csdn.net/JackJia2015/article/details/79789679

构造方法: 用于在对象创建出来的时候为对象的成员变量或者属性赋值
实现方式:
(1)h文件存放类的申明 @interface开头 @end结尾
    m文件存放类的实现 @implementation开头
(2)OC所有类必须继承基类NSObject,无多继承
(3)支持协议,支持多态
(4)”-“对象方法 “+”类方法

例如:创建一个类Person
Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end

Person.m

#import "Person.h"

@implementation Person

@end

下面我们在类中写一些方法

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
//成员变量
@public //全局变量
    int age;
@private //私有变量  自己使用
    float height;
@protected //受保护 子类和自己使用
    NSString *name;
}
//构造方法
//以init开头一般都是构造方法  返回值为id类型 也可以写成(Person *)
- (id)init;
- (id)initWithAge:(int)newAge;
- (id)initWithAge:(int)newAge andHeight:(float)newHeight;

//set get方法
- (void)setAge:(int)newAge;
- (void)setHeight:(float)newHeight;

- (int)getAge;
- (float)getHeight;

@end

Person.m

#import "Person.h"

@implementation Person
{
    //可以在这里声明成员变量 但只能自己用
}

//方法的实现
- (id)init
{
    //super 表示父类 表示NSObject super init表示父类调用自己的init方法
    //(1)分配内存 (2)内存空间指向self self表示对象本身
    if (self = [super init]) {
        age = 25;
        height = 172;
        name = @"jack";
    }
    return self;
}
- (id)initWithAge:(int)newAge
{
    if (self = [super init]) {
        newAge = 25;
        height = 172;
        name = @"jack";
    }
    return self;
}
- (id)initWithAge:(int)newAge andHeight:(float)newHeight
{
    if (self = [super init]) {
        newAge = 25;
        newHeight = 172;
        name = @"jack";
    }
    return self;

}

//set get方法的实现
- (void)setAge:(int)newAge
{
    age = newAge;
}
- (void)setHeight:(float)newHeight
{
    height = newHeight;
}

-(int)getAge
{
    return age;
}
- (float)getHeight
{
    return height;
}

@end

注:OC中的init方法的作用是在对象实例化后对其初始化
set和get方法:用来对数据进行属性赋值和读取属性值
我们在OC中定义一个类的时候,它的成员变量默认情况下是@protected的。这是因为我们的成员变量一般不允许直接去访问,如果需要修改和访问成员变量我们就要用到成员变量的set方法和get方法。set方法是用来给成员变量进行赋值的,也可以起到对传入的数据进行过滤的作用。

为什么使用set和get方法?
这是因为我们的成员变量要进行封装,不能让外部直接对变量进行修改和访问。这提高了安全性的同时也可以让我们不需要去关注实现的细节。

1.set方法作用:提供一个方法给外界设置成员变量的值,有一定的安全性
set方法的命名规范:
   方法法必须以set开头,后面跟上成员变量的名称,并且成员变量的名称首字母大写
   一定要接收一个参数,参数类型跟成员变量的数据类型一致
   定义的形参名称不能跟成员变量名称一样
   返回值一定是void

2.get方法的作用:返回对象内部的成员变量的值
get方法的命名规范:
   返回值类型必须和成员变量的数据类型一致
   方法名称一般跟成员名称一样
   没有形参

下面我们设置一个类
小明同学用mac电脑学习过程

类 人–用一台mac学习OC
类 mac–开机 学习 关机

mac开机(加载内存-加载窗体-加载学习文件-显现窗体)-小明操作-关机(关闭当前窗体-清理内存-关闭电源)
mac.h

#import <Foundation/Foundation.h>

@interface mac : NSObject

- (void)open;       //打开电脑
- (void)operation;  //操作电脑
- (void)off;        //关闭电脑

@end

mac.m

#import "mac.h"

@implementation mac

- (void)open
{
    NSLog(@"打开电脑");
}
- (void)operation
{
    NSLog(@"操作电脑");
}; 
- (void)off
{
    NSLog(@"关闭电脑");
}

@end

xianming.h

#import <Foundation/Foundation.h>
#import "mac.h"
@interface xiaoming : NSObject

- (void)studyObjcWith:(mac *)macbook;

@end

xiaoming.m

#import "xiaoming.h"

@implementation xiaoming

- (void)studyObjcWith:(mac *)macbook
{
    [macbook open];
    [macbook operation];
    [macbook off];
}
@end

最后调用两个对象完成事件
main.m

#import <Foundation/Foundation.h>
#import "xiaoming.h"
#import "mac.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");

        mac *Mac = [[mac alloc]init];
        xiaoming *Xm = [[xiaoming alloc]init];
        //小明同学用mac电脑学习过程
        [Xm studyObjcWith:Mac];
    }
    return 0;
}

@end

猜你喜欢

转载自blog.csdn.net/JackJia2015/article/details/79789679
今日推荐