博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「OC」@property @synthesize和id
阅读量:4504 次
发布时间:2019-06-08

本文共 1246 字,大约阅读时间需要 4 分钟。

 

一、@property @synthesize关键字

  这两个关键字是编译器特性,让Xcode可以自动生成getter和setter。

(一)@property 关键字

  @property 关键字可以自动生成某个成员变量的setter和getter的声明

  如:@property int age;

  编译时遇到这一行,则自动扩展成下面两句:

  - (void)setAge:(int)age;

  - (int)age;

(二)@synthesize关键字

  @synthesize关键字帮助生成成员变量的setter和getter方法的实现。

  如:@synthesize age=_age;

  相当于下面的代码:

  - (void)setAge:(int)age

  {

    _age=age;

  }

  - (int)age

  {

    return _age;

  } 

(三)关键字的使用和注意

  类的声明部分:

   

  类的实现部分:

   

  测试程序:

   

  新版本中:

  类的声明部分:

   

  类的实现部分:

   

  测试程序:

   

  (1)在老式的代码中,@property只能写在@interface  @end中,@synthesize只能写在@implementation   @end中,自从xcode 4.4后,@property就独揽了@property和@synthesize的功能。

  (2)@property int age;这句话完成了3个功能:

    1)生成_age成员变量的get和set方法的声明;

    2)生成_age成员变量set和get方法的实现;

    3)生成一个_age的成员变量。

    注意:这种方式生成的成员变量是private的。

  (3)可以通过在{}中加上int _age;显示的声明_age为protected的。

  (4)原则:get和set方法同变量一样,如果你自己定义了,那么就使用你已经定义的,如果没有定义,那么就自动生成一个。

  (5)手动实现:

    1)如果手动实现了set方法,那么编译器就只生成get方法和成员变量;

    2)如果手动实现了get方法,那么编译器就只生成set方法和成员变量;

    3)如果set和get方法都是手动实现的,那么编译器将不会生成成员变量。 

二、id

  id 是一种类型,万能指针,能够指向\操作任何的对象。

  注意:在id的定义中,已经包好了*号。Id指针只能指向os的对象。

  id 类型的定义

    Typedef struct objc object

    {

      class isa;

    } *id;

  局限性:调用一个不存在的方法,编译器会马上报错。

转载于:https://www.cnblogs.com/xiaodong208/p/4253160.html

你可能感兴趣的文章
传入一维数组到函数 Passing 1D array to function
查看>>
CF 317 A. Lengthening Sticks(容斥+组合数学)
查看>>
53.一个挺有意思的api(drag)
查看>>
Remoting异步回调,向在线用户广播消息
查看>>
python3---函数eval()
查看>>
RFID卡片的低功耗
查看>>
sqlserver2008R2 评估期已过
查看>>
js之数组操作
查看>>
Hive自定义UDAF
查看>>
【计算机视觉】双目测距(五)--匹配算法对比
查看>>
JAVA-环境部分
查看>>
Notes on <High Performance MySQL> -- Ch1: MySQL Architecture
查看>>
python基本数据类型
查看>>
理解MapReduce
查看>>
Vulkan的分层设计
查看>>
WCF 定义SOAP和REST风格的webservice
查看>>
关于display
查看>>
图片懒加载
查看>>
tomcat下jndi的三种配置方式
查看>>
JS moveStart和moveEnd方法(TextRange对象--查找与选择)
查看>>