IOS的变量修饰词@public 、@protected、@package、@private,简称 4P

来源:互联网 发布:软件开发团队管理制度 编辑:程序博客网 时间:2024/05/22 04:34

前言:

          对于这四个词的解释。我首先给出网上,最多的解释。

       @private     作用范围只能在自身类

       @protected 作用范围在自身类和继承自己类。项目里面什么多不写的,默认就是此属性。

       @public       作用范围最大,在任何地方。

       同时,还给出官方网站的逻辑图。下面是官方的图:

      

对于以上,你们看出来什么意思了吗????? 我是很迷糊。

正文:自我理解。

            第一:子类里面

      // @public @protected@package这三个修饰的变量,可以被父类和子类调用

      // @private修饰的变量子类不能调用。所以就证明了 @private修饰的变量只有声明类才可以调用

            第二: 其他类里面

      // @public @package 这两个修饰的变量,可以被子类对象调用

      // @private@protected修饰的变量子类对象不能调用。

            第三总结:  

          // 无论是什么作用范围很大,让人迷糊。不如所,必须创建该类的对象。用该类的对象,在任何地方都可以调用。对于4P修饰的对象,如果想使用他们修饰的变量。就得必须创建可以调用它们的对象。


示例代码:

首先我们创建一个父类

//

//  Father_Object.h

//  Variables _modified

//  我们创建这个类是继承于NSObject(不全是)。这个类有一个女儿。

//  Created by 周双建 on 16/3/7.

//  Copyright © 2016周双建. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Father_Object : NSObject{

    // 女儿的名字

    @public     // 实例变量可以被在任何地方访问。

    NSString * GrilName;

    // 女儿的年龄

    @protected  //实例变量能被声明它的本类和子类访问,所有没有显式制定范围的实例变量都是@protected

    int  GrilAge;

    // 女儿的体重

    @private    //实例变量只能被声明它的类访问

    float GrilWeight;

    // 女儿的身高

    @package    //只能用于本框架,其他的都不能访问

    float GrilHeight;

}

// 类的方法,也有公开和私有

// 获取女孩的名字

-(NSString*)GetYourGrilName;

// 获取女孩的年龄

-(int)GetGrilAge;

// 设置女孩的身高

-(void)SetterGrilHeight:(float)height;

// 设置女孩的体重

-(void)SetterGirlWeight:(float)weight;

@end


父类方法的实现

//

//  Father_Object.m

//  Variables _modified

//  Created by 周双建 on 16/3/7.

//  Copyright © 2016周双建. All rights reserved.

//  Object-c .m文件是实现 .h文件的方法的。其中可以是私有的或者是公有的。


#import "Father_Object.h"


@implementation Father_Object

// 获取姓名

-(instancetype)init{

    if (self==[superinit]) {

        GrilWeight = 120.0f;

        GrilHeight = 10.f;

        GrilAge = 23;

        GrilName = @"茱莉亚";

//        self->GrilAge = 23;

//        self->GrilHeight = 120.0f;

//        self->GrilName = @"玛利亚";

//        self->GrilWeight = 90.0f;

    }

    return self;

}

// 获取姓名

-(NSString*)GetYourGrilName{

    returnGrilName;

}

// 获取年龄

-(int)GetGrilAge{

    returnGrilAge;

}

// 设置体重

-(void)SetterGirlWeight:(float)weight{

    GrilWeight = weight;

}

// 设置身高

-(void)SetterGrilHeight:(float)height{

    GrilHeight = height;

}

@end


让后,我们在创建一个继承于父类的子类

//

//  Gril_Object.h

//  Variables _modified

//

//  Created by 周双建 on 16/3/7.

//  Copyright © 2016周双建. All rights reserved.

//


#import "Father_Object.h"


@interface Gril_Object : Father_Object

// 获取女孩的全部信息

-(NSDictionary*)GetGrilInfo;

@end


子类方法的实现

//

//  Gril_Object.m

//  Variables _modified

//  我们现在创建一个Father_Object的子类。她又几个方法。

//  Created by 周双建 on 16/3/7.

//  Copyright © 2016周双建. All rights reserved.

//


#import "Gril_Object.h"


@implementation Gril_Object

-(NSDictionary*)GetGrilInfo{

    NSMutableDictionary * TempDict = [NSMutableDictionarydictionary];

    // @public @protected@package这三个修饰的变量,可以被父类和子类调用

    // @private 修饰的变量子类不能调用。所以就证明了 @private修饰的变量只有声明类才可以调用

    [TempDict setObject:@(GrilAge)forKey:@"age"];

    [TempDict setObject:@(GrilHeight)forKey:@"height"];

    [TempDict setObject:GrilNameforKey:@"name"];

    return TempDict;

}

@end


我们在其他类里面调用,上述的子类

//

//  ViewController.m

//  Variables _modified

// IOS 变量的4P介绍

/*

      The development of the iOS, constants and variables exist throughout the entire development process.Among them, the risk and function of variables is incomparable.However, in engineering use variable we also want to consider to safety.What is safe?The source of security from there?My understanding is that safety concerns from variables.Below, we term of four modify variables, to break down.

     iOS的开发中,常量和变量的存在贯穿整个开发过程。其中,变量的出现几率和作用是无可比拟的。但是,在工程里面使用变量我们也要考虑到安全。安全是什么?安全的根源来至那里?我的理解是安全隐患来源于变量。下面,我们就对四个修饰变量的词,进行详解。)

 */

//  Created by 周双建 on 16/3/7.

//  Copyright © 2016周双建. All rights reserved.

//


#import "ViewController.h"

#import "Gril_Object.h"

@interface ViewController (){

    @package

    @private

    @protected

    @public

}

@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    Gril_Object * GrilObject = [Gril_Objectnew];

    NSLog(@"%@",GrilObject.GetGrilInfo);

    // @public @package 这两个修饰的变量,可以被子类对象调用

    // @private@protected修饰的变量子类对象不能调用。

    NSLog(@"%@",GrilObject->GrilName);

    NSLog(@"%f",GrilObject->GrilHeight);

    // 子类可以调用父类的方法

    [GrilObject SetterGrilHeight:120.0f];

    NSLog(@"%f",GrilObject->GrilHeight);

    // Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end









0 0
原创粉丝点击