我的iOS开发之Objective-C第2天之面向对象特性之封装

1、封装的定义:
即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。


举一个例子吧
Student.h
声明类,我们通常放到.h的头文件中
声明类使用关键字 @interface

#import <Foundation/Foundation.h>
@interface Student : NSObject
{

    //@private 私有成员,只有当前类可以访问;
    //@protected 受保护成员,只有当前类或子类可以访问(如
    //果没有添加任何修饰则默认为@protected);
    //@public 公共成员,所有类均可访问;

    //实例变量
    @public

    NSString *name;
    int age;
}
//实例方法(减号方法)
-(void)sayHi;
//类方法(加号方法)
+(void)sayHi;
@end

Student.m
实现一个类 使用关键字:@implementation
实现一个类通常放到.m的文件中
实现类主要是对方法的具体实现

#import "Student.h"

@implementation Student
//方法的实现
-(void)sayHi{
    NSLog(@"我叫%@ 今年%d岁 ",_name,_age);
}
+(void)sayHi{
    NSLog(@"我是一名学生");
}

@end

main.m

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
    //通过new或者alloc init创建一个对象
        Student *stu=[Student new];
        Student *stu1=[[Student alloc] init];
        //对public实现变量,可以直接访问进行修改
        //对于protected以及private访问可用setter,getter方法,后面细说
        stu->_age=22;
        stu->_name=@"lvdonghui";
        //方法的调用
        [Student sayHi];
        [stu sayHi];

    }
    return 0;
}

运行结果
2015-08-12 09:49:07.073 St[752:39725] 我是一名学生
2015-08-12 09:49:07.075 St[752:39725] 我叫lvdonghui 今年22岁


2、setter,getter方法
方法的声明

-(void) setName:(NSString *) name;
-( NSString *) name;

方法的实现

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

在main.m中使用

  Student *stu=[Student new];
      //调用方法访问实例变量
        [stu setName:@"吕冬辉"];
        NSLog(@"%@",[stu name]);

也可以使用点语法

 stu.name=@"吕冬辉";
        NSLog(@"%@",stu.name);

2、对象的存储细节
上面的例子中stu就是对象,Student就是类
类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成 员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份 存储空间,类的方法存储于此。
这里写图片描述

3、初始化方法

  1. 便利初始化
-(Student *)initWithName:(NSString *)name Age:(int)age{
    if (self = [super init]) {
        self.name=name;
        _age=age;
    }
    return self;
}
  1. 便利构造器
+(Student *)studentWithName:(NSString *)name Age:(int)age{
    return  [[Student alloc] initWithName:name Age:age];
}

3main.m中运用

Student *stu=[Student  studentWithName:@"吕冬辉" Age:22];
        [stu sayHi];

结果:

2015-08-12 13:06:21.527 St[952:70940] 我叫吕冬辉 今年22岁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值