zoukankan      html  css  js  c++  java
  • @property、@sythesize以及Ivar和@dynamic讲解(下)

    下面仅仅是一些基本知识,可能有些知识用的比较少,不过知道怎么使用或者了解这个知识,还是不错的,毕竟技多不压身嘛!读完这篇文章大约需要5-10分钟左右!!!

    一、@property

    1、在头文件中:

    @property int count; 

    面对上面的一行代码

    - (int)count;  
    -(void)setCount:(int)newCount; 

     通过@property int count ;这样定义完成之后,我们就可以使用这个属性啦,而且这个属性就会自动有setter和getter方法。

    例如:

    @property NSString *userName;

    第一步生成_userName属性

    第二步为_userName属性自动生成set/get方法啦!!!

    >>>>>Problem @property 增强

    问题1:使用property增强后,什么时候要重写getter/setter方法?

    (1).使用property增强,只会生成最简单的getter/setter方法的声明和实现,并不会对传入的数据进行过滤。

    (2).如果想对数据进行过滤,那么我们就必须重写getter/setter方法。

    问题2:重写getter/setter方法有哪些注意点?

    (1)如果重写了setter方法,那么property就只会生成getter方法

    (2)如果重写了getter方法,那么property就只会生成setter方法

    (3)如果同时重写了getter/setter方法,那么property就不会自动帮我们生成私有的成员变量(带_的成员变量) 

    二、@synthesize

    #import <Foundation/Foundation.h>  
    #import "User.h"  
      
    //有时候我们不想定义属性为_开头的  
    //这时候我们就可以使用@synthesize,来修改我们想要的属性名  
      
    //这时候属性_userName变成了$userName  
      
    @implementation User  
    @synthesize userName = $userName;  
      
    @end  

    因为我们使用@property定义属性之后,如果我们想修改这个属性的名称,我们可以使用@synthesize关键字来对名称进行修改。

    >>>>>>注意点:

    @synthesize age;代表:
    (1).setter和getter实现中会访问@synthesize后同名成员变量age

    (2).如果成员变量age不存在,就会自动生成一个@private的成员变量age

    、Ivar(成员变量)

    Ivar可以理解为类中的一个变量,主要作用是用来保存数据的。@property可以说@property = Ivar + setter + getter 

    >>>>lvar 用的并不是特别多,大家用的时候也不会太在意这个

    @dynamic和@synthesize的异同

      a. 通过@synthesize 指令告诉编译器在编译期间产生getter/setter方法
      b. 通过@dynamic指令,告诉编译器,属性的 setter 与 getter 方法由用户自己实现,不会自动生成,如果没有自动生成在运行时调用会crash
      c. 有的存取是在运行时动态创建的,如在CoreData的NSManagedObject类使用的某些。如果你想这些情况下,声明和使用这些属性,但要避免缺少方法在编译时的警告,你可以使用@dynamic动态指令,而不是@synthesize合成指令

  • 相关阅读:
    Oracle11g备份与恢复-手工备份与恢复
    undo段及区的状态和使用
    图解一个事务操作流程
    Oracle11g备份与恢复
    undo表空间概述-1
    事务的隔离级别
    事务概述
    系统改变号(SCN)详解
    实例崩溃恢复原理--检查点队列的作用
    Oracle-检查点队列
  • 原文地址:https://www.cnblogs.com/guohai-stronger/p/9034831.html
Copyright © 2011-2022 走看看