Objective的头文件@interface属性

1 前言

最近有个疑惑 @interface中的属性和@property声明的属性有什么区别呢,经过上网搜索和实践验证,个人总结了几点,共同学习一下。

2 详述

例子

PropertyModel.h

 

#import <Foundation/Foundation.h>

@interface PropertyModel : NSObject{
    NSString* sex;
    @public NSString* name;
    @private NSString* classes;
}

@property(nonatomic,copy)NSString* sexName;
@property(nonatomic,copy)NSString* classesName;
@end


SubProModel.m

 

#import "SubProModel.h"

@implementation SubProModel

-(void)testSub{
//    self.newClasses =  self->classes;//Wrong:private property
    self.newSexName = self->sex;
    self.newName = self->name;
}

@end


 

main.m

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


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

    @autoreleasepool {
        
        NSLog(@"Hello, World!");
        PropertyModel* pro = [[PropertyModel alloc] init];
//        NSString* temp = pro->sex;//Wrong:pro is protected
        NSString* temp = pro->name;
    }
    return 0;
}


2.1 本类中

对于PropertyModel的@interface中的属性:

    NSString* sex;

    @public NSString* name;

    @private NSString* classes;

sex为默认的protect属性只允许本类和子类访问。

name为共有的所有类都能访问。

classes为私有的只有子类访问。

2.2 本类访问

 

 

#import "PropertyModel.h"

@implementation PropertyModel

-(void) testPro{
    self.sexName = sex;
    self.classesName = classes;
}

@end


可以直接调用属性名称访问。

2.3 外部类访问

 

 

#import "SubProModel.h"

@implementation SubProModel

-(void)testSub{
//    self.newClasses =  self->classes;//Wrong:private property
    self.newSexName = self->sex;
    self.newName = self->name;
}

@end


需要使用“->”访问指针形式访问。

3 结语

以上是所有内容,希望对大家有所帮助。多的就不说了,可以下载Demo详细观看他们的区别。

Demo下载地址:http://download.csdn.net/detail/u010013695/5539117


原文地址:https://www.cnblogs.com/dyllove98/p/3125157.html