源码:http://files.cnblogs.com/ios8/TestPropertyDemo.zip
1 前言
最近有个疑惑 @interface中的属性和@property声明的属性有什么区别呢,经过上网搜索和实践验证,个人总结了几点,共同学习一下。
2 详述
例子
 
PropertyModel.h
 
- class="alt">#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