objective-C学习笔记数据成员:属性与实例变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了objective-C学习笔记数据成员:属性与实例变量相关的知识,希望对你有一定的参考价值。

类型成员 Type Member

结构体 struct 的成员很简单,只有变量。

类的成员就很多了:

    数据成员 data member 描述对象(本讲重点

    · 实例变量  instance variable

    · 属性 property

    函数成员 function member

    · 方法 method

    · 初始化器  init

    · 析构器  dealloc

类的属性:

 默认情况下,编译器会为属性定义propertyName自动合成:

   一个getter访问器方法: propertyName

   一个setter访问器方法: setPropertyName

   一个实例变量 _propertyName

 只读情况下,编译器只会为属性fullName自动合成:

   一个getter访问器方法: fullName

属性的描述特性:

   读写特性 readwrite (默认) /readonly

   多线程特性 atomic (默认) /nonatomic

   内存管理特性:

    强引用 strong (默认)

    弱引用 weak  防止循环引用时的内存溢出

    拷贝引用 copy 防止引用类型拷贝时的连带赋值变化。

   其他: retain、assign、unsafe_unretained

实例变量:

类外一律使用属性来访问,尤其是在类外访问类类型属性的实例对象的话,会出现内存出错。类内大多也都用self.属性来访问。除了以下情况。

   ·初始化器 init

   ·析构器 dealloc

   ·自定义访问器方法

生存周期:

值类型的实例变量直接内嵌在对象实例的堆中,跟随对象实例内存的释放而被释放。

引用类型的实例变量:对象自己有一个指针,实例变量中也会存储这个对象的指针,ARC会针对这个指针做计数管理,释放计数为零的对象。

   也就是说,实例变量的指针和对象自己的指针(其实这两个指针指向的地址是同一个)都失效的情况下,这个对象的堆才会被释放,实例变量的堆会在指向自己的指针失效以后再释放。

其他:(以后可能会说到,先提前说一下)

一:

protocal :相当于java中的interface;

interface + implementation 才是一个完整的类声明。

interface  包括了成员变量和成员方法的声明、继承关系、protocal实现关系等。

implementation 是实现部分

二:

类声明里面的变量叫做实例变量,因为是类内部用的,所以在外部不能访问。类外只能访问类的属性。

类变量就是静态变量

类里面的方法里的变量就是一般的局部变量

三: 

- 代表实例方法,类外调用的时候需要实例化。

+代表类方法,类外调用的时候不需要实例化。

以上是关于objective-C学习笔记数据成员:属性与实例变量的主要内容,如果未能解决你的问题,请参考以下文章

Python中面向对象(学习笔记)

Objective-C学习笔记(二十二)——初始化方法init的重写与自己定义

《从零开始学Swift》学习笔记(Day 31)——存储属性

Objective-C 实例变量与属性的区别

Objective-C学习笔记-第一天

go语言学习笔记 — 基础 — 复合数据类型 — 结构体(10.2):自定义设置隐藏的成员属性,并获取它的值