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

1 前言

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

2 详述

例子

PropertyModel.h

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

SubProModel.m

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

main.m

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

2.1 本类中

对于PropertyModel的@interface中的属性:

NSString* sex;

@public NSString* name;

@private NSString* classes;

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

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

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

2.2 本类访问

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

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

2.3 外部类访问

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

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

3 结语

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

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

Objective的头文件@interface属性的更多相关文章

  1. UIButton 头文件常见属性和方法

    UIButton头文件常见属性 1.属性 contentEdgeInsets: default is UIEdgeInsetsZero.设置内容四边距,默认边距为0 @property(nonatom ...

  2. UILabel头文件常见属性

    text : default is nil 文本属性,默认值是 nil @property(nullable, nonatomic,copy) NSString *text; font : defau ...

  3. Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法

      Technical Q&A QA1914 Viewing the interface of your Swift code Q:  How do I view the interface ...

  4. Objective-C声明在头文件和实现文件中的区别

    Objective-C声明在头文件和实现文件中的区别 转自codecloud(有整理) 调试程序的时候,突然想到这个问题,百度一下发现有不少这方面的问答,粗略总结一下: 属性写在.h文件中和在.m文件 ...

  5. jni.h头文件详解二

    作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...

  6. jni.h头文件详解一

    1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...

  7. 【转】 jni.h头文件详解(二)

    原文网址:http://blog.csdn.net/shaohuazuo/article/details/42932813 作者:左少华 博客:http://blog.csdn.net/shaohua ...

  8. NSObject头文件解析 / 消息机制 / Runtime解读 (一)

    NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h> @interface Clas ...

  9. #include、#import与@class的使用与头文件循环引用问题

    #include #include <>:一般是对系统库文件的引用,编译器会去系统文件文件夹下查找. #include "xxx.h":一般是对自己定义文件的引用,编译 ...

随机推荐

  1. MyBatis Spring SqlSessionFactoryBean 配置

    在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建.而在 MyBatis-Spring 中,则使用 SqlSessionFactory ...

  2. Windows下 VS2015编译levelDB(nmake)

    VS2015编译levelDB Leveldb是一个google实现的非常高效的kv数据库,非常适合嵌入到程序中.如果有简单的key-value数据库需求,而又想使用一个数据库服务的话,levelDB ...

  3. Weblogic部署gbk编码的项目乱码

    问题描述: weblogic默认部署的项目编码utf-8,由于项目特殊编码gbk导致打开项目中文全是乱码! 心哇凉哇凉.... 问题解决: 01.调休jvm参数 xxx_domains/bin/set ...

  4. MongoDB安装实录

      mongodb是nosql中的贵族,很受欢迎... 01.下载 官方:https://www.mongodb.com 社区版.企业版 https://www.mongodb.com/downloa ...

  5. Oracle Tuxedo工作站客户端与服务端的样例程序

    服务端代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cty ...

  6. 远程阿里云window服务器报错身份验证错误

    整理文章,很久之前遇到的一个问题,一直呆在草稿箱,特发布出来,帮助可能遇到该问题的人 mstsc连接时报错如下 解决方法: 修改本地安全组策略[安全组  gpedit.msc]

  7. ios中修改数字键盘

    自定义文本框: #import <UIKit/UIKit.h> //自定义键盘的键定义 @interface DIYKey : NSObject { } @property(copy, n ...

  8. Go map中一个很重要的特性

    先看一段代码: func main() { m := make(map[int]string) m[1] = "a" m[2] = "b" m[3] = &qu ...

  9. HttpClient库设置超时

    HttpClient库API跟Lucene一样,每个版本的API都变化很大,这有点让人头疼.就好比创建一个HttpClient对象吧,每一个版本的都不一样. 3.X是正常的Java语法 HttpCli ...

  10. 【转】细说UI线程和Windows消息队列

    在Windows应用程序中,窗体是由一种称为“UI线程(User Interface Thread)”的特殊类型的线程创建的. 首先,UI线程是一种“线程”,所以它具有一个线程应该具有的所有特征,比如 ...