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