类的三大特性之-----封装

封装:

——–对于新手来说,封装听起来是不是就好像打包的意思呢?的确,当初我刚刚接触面向对象语言的时候,记得第一次听到封装一词,我就在琢磨,封装?好像都是一些货物需要打包装箱,这代码为什么要封装呢,当时就懵了!不过还好,由于老师耐心的讲解,终于化开了我的疑虑,哈哈。
封装:
  是把过程和数据包围起来,对数据的访问只能通过已定义的接口。当然还不止这些,封装主要是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。说白了不就是,咱怕家里小孩儿瞎捣鼓电脑,然后咱把该保护的文件给隐藏起来了呗!
封装的使用:
   其实使用封装最主要的标志就是,咱们使用了setter和getter这哥俩,他俩同时使用就是对数据的封装,当然在OC中还有更加简洁的封装方式,下面列出。
#import <Foundation/Foundation.h>
@interface Package : NSObject
{
    NSString *name;
    int age;
}

- (void)setName : (NSString *)NewName;//设置set方法
- (NSString *)name;//设置get方法,是不是没有发现get关键字呢,对的,这里不需要get关键字哦!

- (void)setAge : (int)NewAge;
- (int)age;
@end

@implementation Package

- (void)setName : (NSString *)NewName{

    name = NewName;//实现set方法
}
- (NSString *)name{

    return name;//实现get方法
}

- (void)setAge : (int)NewAge{

    age = NewAge;
}
- (int)age{
    return age;
}
@end

int main(int argc, const char * argv[]) {


    Package *p = [[Package alloc]init];
    //这中实例化方式非常常见的,是关于内存方面的,这里就不啰嗦了!
    [p setName:@"liming"];
    [p setAge:22];
   //Package *p1 = [Package new];
   //[p1 setName:@"zhangsan"];
   //[p1 setAge:23];

    NSLog(@"name is:%@,age is:%d",p.name,p.age);


    return 0;
}
**重点内容**
setter和getter方法介绍完了,接下来就介绍一下,下一对兄弟!@property和@synthesize
(1)@property:
自动生成某个成员变量的setter,getter方法声明。在@interface中使用:
#import <Foundation/Foundation.h>
@interface PackageDemo : NSObject
{   
      NSString *name;
      int age;

}

@property NSString *name;//@property对name的set方法声明完毕!
@property int age;

@end
(2)@synthesize
自动生成由@property生成的setter,getter方法的实现,并且访问相应的成员变量。
@implementation PackageDemo

@synthesize name;
@synthesize age;

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        PackageDemo *p = [[PackageDemo alloc]init];

        [p setName:@"liming"];
        [p setAge:22];

        NSLog(@"the name is:%@,age is:%d",p.name,p.age);
    }
    return 0;
}
天,有木有这跟上面使用set和get那哥俩的时候比较起来省事多了!
使用@synthesize即可完成前面对setter,getter方法的实现。@property,@synthesize是通过编译器完成的.
有必要说说getter和setter 的调用方法和点( . )调用方法
1.一般的调用方法,是传统的中括号[]的调用方法,比如
//比如上面的PackageDemo类
PackageDemo *p = [[PackageDemo alloc]init];
[p setName:@"liming"];
[p setAge:30];
2.点语法(可以用来替代传统的中括号[]方式)


         PackageDemo *p = [[PackageDemo alloc]init];
         p.name = @"liming";
        //[p setName:@"liming"];
         p.age = 22;
        //[p setAge:22];

        NSLog(@"the name is:%@,age is:%d",p.name,p.age);
由上面的示例中可以轻易的看出点( . )语法的用法,即把原来的[p setName:@”liming”]换成了p.name = 10了,而且他们俩可完全等价,用起来就是这么 so easy!当然了,这里还是会存在一些误区的,误区就在于,他俩完全等价,可不要以为p.name是直接访问p对象的成员变量namel了,而是由咱们的编译器在遇到p.name = @”liming”的时候自动将这行代码变化成了[p setName:@”liming”]进行编译了,可不要误会哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值