「OC」@property @synthesize和id

一、@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;

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

时间: 2024-08-04 06:12:40

「OC」@property @synthesize和id的相关文章

OC语言@property @synthesize和id

一.@property @synthesize 这两个关键字是编译器特性,让xcode可以自动生成gettersetter的声明和实现. (一)@property  @property 关键字可以自动生成某个成员变量的settergetter方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize @synthesize关键字帮助生成成员变量的setterge

「OC」block 和 protocol

一.block   (一)简介 block 是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,block 可以在任何时候执行.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多. block 和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义block 变量 // 有参数,返回值类型为int int (^MySum)(int, int) = ^(int a, int b) { return

「OC」 基本语法

一.OC简介 在C语言的基础上,增加了一层最小的面向对象语法:完全兼容C语言:可以在OC代码中混入C语言代码,甚至是C++代码:可以使用OC开发Mac OS X平台和iOS平台的应用程序. 二.OC语法预览 (一)关键字 基本上所有的关键字都是以@开头的,如@interface  @implementation  @public等,少部分没有以@开头,如id,_cmd等 (二)字符串以@开头 C语言字符串:“hello” OC语言字符串:@“hello” (三)其他语法 基本类型:5种,增加了布

「OC」构造方法和分类

一.构造方法 (一)构造方法的调用 创建一个可用的对象:Person *p=[Person new]; new方法实际上是分为两步来创建一个对象: 1)使用+alloc方法来分配存储空间(返回分配的对象): 2)使用-init方法来对对象进行初始化. 可以把new方法拆开如下: 1.调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[person  alloc]; 2.调用对象方法-init进行初始化,返回对象本身 Person *p2=[p1 init]; 3.以

『iOS开发』「OC」00 - 写在前面

一.OC简介 在C语言的基础上,增加了一层最小的面向对象语法:完全兼容C语言:可以在OC代码中混入C语言代码,甚至是C++代码:可以使用OC开发Mac OS X平台和iOS平台的应用程序. 二.OC语法预览 (一)关键字 基本上所有的关键字都是以@开头的,如@interface  @implementation  @public等,少部分没有以@开头,如id,_cmd等 (二)字符串以@开头 C语言字符串:“hello” OC语言字符串:@“hello” (三)其他语法 基本类型:5种,增加了布

「OC」内存管理

一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对

「OC」 封装

一.面向对象和封装 面向对象的三大特性:封装.继承和多态 在OC语言中,使用@interface和@implementation来处理类.   @interface就好像暴露在外面的时钟表面,像外界提供展示以及接口.@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来. 二.set方法 在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public.@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值.在set方法的内部也可以

『iOS开发』「OC」02 - 类和对象

一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程 二.类和对象 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行类的划分中,一般

『iOS开发』「OC」03 - 封装

一.面向对象和封装 面向对象的三大特性:封装(成员变量).继承和多态 在OC语言中,使用@interface和@implementation来处理类.   @interface就好像暴露在外面的时钟表面,像外界提供展示以及接口.@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来. 二.set方法 在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public.@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值.在set方法