使用"点语法"

Person *p =[Person new];

//点语法
//对象.属性名
//注意,此时 (p.age)并不是直接方法实例对象
//而是xcode可能到点语法(p.age)后,会帮我们自动替换
//p.age --替换--->[p setAge:18]
p.age=18; //注意.此处 p.age出现在了等号的右侧
//设计上,当xcode 看到了p.age出行在等号的右侧后
//它会帮我们把p.age---替换成--->[p age];
int a= p.age;
NSString *s =[p name];

  

@property

@property是编译器的指令
编译器指令: 就是告诉编译器要作什么
@property 告诉编译器 声明属性的访问器(getter/setter)方法 好处:免去我们手工书写get和set方法繁琐的代码

  

@property用法

格式:
@property 类型名 实例变量名

  

用法:

 .在xcode4. 之前,用于帮我们实现get/set方法的声明
.在xcode .4之后,有稍微增强

  

使用注意:

 .@property只能写在@interface @end中
.@property 用来自动生成成员变量的 get/set方法声明(xcode4. 以前)
告诉property要生成的get/set 方法声明的成员变量类型是什么
告诉property要生成的get/set 方法是哪个属性的,属性名称去掉下划线 如果写成了 @property int _age;
Person *p =[Person new];
p.age 就拿不到了
p._age;

  

@property 增强使用

   Xcode4.4版本以后支持的
  只使用 @property进行声明,类会自动帮你实现
  操作的是带有下划线的实例变量   如果没有手动声明成员变量,property会在.m文件中自动帮我们生成一个_开头的成员变量   注意; 这个实例的生成与.m文件 是私有不能被子类使用的
      get和set方法在.m中可以自己手动实现,但是当用增强时,get 、set只能手动实现一个

@property参数

  格式:
  @property(参数1,参数2) 数据类型 方法名
 参数类型      参数        说明
原子性      atomic        对属性加锁,多线程下线程安全,默认值
          nonatomic      对属性不加锁,多线程下不安全,但是速度块
读写属性     readwrite      生成getter、setter ,默认值
         readonly       只生成getter方法
方法处理     assign        直接赋值,默认值
          retain        先release原来的值,再retain新增
          copy         先release原来的值,再copy新增   @property(assign) int age;
  int _age;
  -(void)setAge:(int)age{
    _age = age;
  }   @property (retain) Car * car;
  Car _car;
  -(void)setCar:(Car)car{
    if(_car!=car){
      [_car release];
      _car =[car retain];
    }
  } )内存管理相关参数
  retain:对对象release旧值,retain新值 (适用于OC对象类型)
  assign:直接赋值(默认,适用于非oc对象类型);
  copy : release旧值,copy新值   @property ( nonatomic,assign) Car *car; 例如:在color的get set方法中修改age的值
  @property(nonatomic,setter=setColor:,getter=color) int age;

  

OC点语法介绍和使用以及@property关键字的更多相关文章

  1. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  2. oc总结 --oc基础语法相关知识

    m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const cha ...

  3. OC总结 【OC基础语法相关知识】

    m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const cha ...

  4. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

  5. OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...

  6. OC基础--内存管理中的@property关键字以及其参数

    在上一篇博客中整理的内存管理,管理类的代码量会感觉很大,而且如果对象多的话,感觉到代码有点冗余.下面就介绍Xcode中为我们自动生成内存管理代码的关键字@property 例如:在Person这个类中 ...

  7. Swift翻译之-Swift语法入门 Swift语法介绍

    目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...

  8. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...

  9. [Objective-c 基础 - 2.2] OC弱语法、类方法

    A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误   B.类方法 1.是类名调用的方 ...

随机推荐

  1. css-dialog样式实现弹框蒙层全屏无需JS计算高度兼容IE7

    <!DOCTYPE html><html><head>  <meta charset="UTF-8">  <title> ...

  2. virtualenv 安装不同版本的虚拟环境的办法

    废话不多说直接上代码 virtualenv -p C:\Python27\python2.exe env 上面的*.exe是你要使用的python版本的exe文件的绝对路径. 官方文档参考:http: ...

  3. Pycharm集成PyQt4并使用

  4. 测试开发Python培训:实现屌丝的黄色图片收藏愿望(小插曲)

    男学员在学习python的自动化过程中对于爬虫很感兴趣,有些学员就想能收藏一些情色图片,供自己欣赏.作为讲师只能是满足愿望,帮助大家实现对美的追求,http://wanimal.lofter.com/ ...

  5. 整合初步--------->SSH(注解版)

    上面的一篇博客已经介绍了 Spring和Hibernate之间的整合,没看过的童鞋可以去看看,这篇博客讲解Spring+Hibernate+Struts2注解版......... 个人觉得使用注解可能 ...

  6. Hibernate基础学习(四)—对象-关系映射(上)

    一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...

  7. C++(浅析枚举类型-enum)

    枚举类型 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓&quo ...

  8. SqlParameter参数类型为int32时候的传值陷阱

    前2天在使用SqlParameter传递参数的时候遇到一个小坑,这里分享一下. SqlParameter para=new SqlParameter("@IsDeleted",0) ...

  9. 给 endv 取个好名字有赏!

    给 endv 取个好名字有赏! 直接回复即可 给 endv 取个好名字,拆分原则 endv = endv endv = end+v endv = en+d+v endv = en+dv endv = ...

  10. js中将yyyy-MM-dd格式的日期转换

    1.转换为yyyy年MM月dd日 var str = "2017-02-16"; var reg =/(\d{4})\-(\d{2})\-(\d{2})/; var date = ...