Objective的头文件@interface属性

源码:https://files.cnblogs.com/ios8/TestPropertyDemo.zip

1 前言

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

2 详述

例子

 

PropertyModel.h

 

  1. #import <Foundation/Foundation.h>  
  2.   
  3. @interface PropertyModel : NSObject{  
  4.     NSString* sex;  
  5.     @public NSString* name;  
  6.     @private NSString* classes;  
  7. }  
  8.   
  9. @property(nonatomic,copy)NSString* sexName;  
  10. @property(nonatomic,copy)NSString* classesName;  
  11. @end  



 

SubProModel.m

 

 
  1. #import "SubProModel.h"  
  2.   
  3. @implementation SubProModel  
  4.   
  5. -(void)testSub{  
  6. //    self.newClasses =  self->classes;//Wrong:private property  
  7.     self.newSexName = self->sex;  
  8.     self.newName = self->name;  
  9. }  
  10.   
  11. @end  



 

 

main.m

 

 
  1. #import <Foundation/Foundation.h>  
  2. #import"PropertyModel.h"  
  3.   
  4.   
  5. int main(int argc, const char * argv[])  
  6. {  
  7.   
  8.     @autoreleasepool {  
  9.           
  10.         NSLog(@"Hello, World!");  
  11.         PropertyModel* pro = [[PropertyModel alloc] init];  
  12. //        NSString* temp = pro->sex;//Wrong:pro is protected  
  13.         NSString* temp = pro->name;  
  14.     }  
  15.     return 0;  
  16. }  



 

2.1 本类中

对于PropertyModel的@interface中的属性:

 

    NSString* sex;

    @public NSString* name;

    @private NSString* classes;

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

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

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

2.2 本类访问

 

 

 
  1. #import "PropertyModel.h"  
  2.   
  3. @implementation PropertyModel  
  4.   
  5. -(void) testPro{  
  6.     self.sexName = sex;  
  7.     self.classesName = classes;  
  8. }  
  9.   
  10. @end  



 

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

2.3 外部类访问

 

 

 
  1. #import "SubProModel.h"  
  2.   
  3. @implementation SubProModel  
  4.   
  5. -(void)testSub{  
  6. //    self.newClasses =  self->classes;//Wrong:private property  
  7.     self.newSexName = self->sex;  
  8.     self.newName = self->name;  
  9. }  
  10.   
  11. @end  



 

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

3 结语

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

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

posted @ 2013-10-30 07:16  苹果吧  阅读(1075)  评论(0编辑  收藏  举报