`

Objective-C - 自动引用计数器

阅读更多

文章来源:http://www.itnose.net/detail/6251077.html
更多文章:http://www.itnose.net

引用计数器的基本操作

/* 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> dealloc * 当一个对象要被回收的时候,就会调用 * 一定要调用[super dealloc],这句调用要放在最后面 2.概念 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS) 3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错 */

#import <Foundation/Foundation.h>
#import "Person.h"

int main()
{
    // 1
    Person *p = [[Person alloc] init];

    //NSUInteger c = [p retainCount];

    //NSLog(@"计数器:%ld", c);


    // 2 retain方法返回的是对象本身
    [p retain];

    // 1
    [p release];

    // 0 野指针:指向僵尸对象(不可用内存)的指针
    [p release];

    [p retain];

    // -[Person setAge:]: message sent to deallocated instance 0x100109a10
    // 给已经释放的对象发送了一条-setAge:消息:
    p.age = 10;
    //[p setAge:10];

    // 指针p变成空指针
    //p = nil;

    // EXC_BAD_ACCESS : 访问了一块坏的内存(已经被回收、已经不可用的内存
    // 野指针错误
    // OC不存在空指针错误,给空指针发送消息,不报错
    [p release];
    [p release];
    [p release];
    [p release];

    [nil release];

    return 0;
}
@interface Person : NSObject

@property int age;

@end
#import "Person.h"

@implementation Person


// 当一个Person对象被回收的时候,就会自动调用这个方法
- (void)dealloc
{
    NSLog(@"Person对象被回收");

    // super的dealloc一定要调用,而且放在最后面
    [super dealloc];
}

@end

更多文章:http://www.itnose.net/st/6251077.html
分享到:
评论

相关推荐

    《深入浅出发Objective-C》 内存管理.pdf

    除了手动管理内存外,Objective-C还支持自动引用计数(Automatic Reference Counting,简称ARC),这是一种编译器技术,可以在编译时自动插入内存管理的代码,从而减轻开发者的负担。开发者只需编写代码,无需显式...

    Objective-C入门指南

    Objective-C使用引用计数来管理内存,每个对象都有一个引用计数器。当对象的引用计数变为零时,对象会被自动释放。为了正确管理内存,开发者需要理解以下概念: 1. `retain`:增加对象的引用计数。 2. `release`:...

    objective-c教程

    通过引用计数器、自动释放池和property属性参数详解,学习者能够理解如何有效地管理内存,避免内存泄漏。 单例模式是确保一个类只有一个实例并提供一个全局访问点的设计模式。在Objective-C中实现单例模式涉及到...

    Objective-C培训资料.pdf

    Objective-C引入了ARC(Automatic Reference Counting)自动引用计数,简化了内存管理的复杂性。 ### 核心框架 #### Foundation框架 Foundation框架提供了Objective-C程序的基础类库,包括字符串处理、数组、字典...

    [Objective-C.程序设计(第4版)].(斯蒂芬).林冀等.扫描版

    - **引用计数**:Objective-C中的每个对象都有一个引用计数器,当对象被创建时计数器初始化为1,每次对象被保留(retain)时计数器加1,每次对象被释放(release)时计数器减1。当计数器变为0时,对象会被自动释放。...

    iPhoneMac_Objective-C内存管理教程和原理剖析.pdf

    - 自动引用计数 (ARC) 是一种编译器级别的功能,旨在减轻开发者在手动管理内存时的负担。自 iOS 5 和 OS X 10.7 开始,Apple 引入了 ARC 来自动管理引用计数,从而减少了内存泄漏的风险。在 ARC 下,`retain` 和 `...

    Objective-C高级

    6. **内存管理**:Objective-C使用引用计数(Reference Counting)进行内存管理,每个对象都有一个计数器,当引用数为零时,对象将被自动释放。ARC(Automatic Reference Counting)是现代Objective-C的一部分,它...

    简单讲解Objective-C的基本特性及其内存管理方式..pdf

    Retain消息使计数器+1,Release消息使计数器-1,retainCount消息获得对象当前的引用计数器值。 对象的销毁是指当对象的引用计数器为0时,那么它将被销毁,其占用的内存被系统回收。在对象被销毁时,系统会自动向...

    SDK与Objective-C 2.0.docx

    Objective-C的内存管理基于引用计数,对象创建(如`init`和`alloc`)时计数器加一,`retain`操作会使计数器增加,`release`则使其减少。当计数器为0时,对象会被销毁。此外,可以使用`autorelease`自动释放对象。 ...

    Objective-C 内存管理机制 - iOS知识库1

    Objective-C 是 iOS 开发中的主要编程语言,其内存管理机制对于优化应用性能和防止内存泄漏至关...同时,随着 Swift 的普及,Swift 中的内存管理(如自动引用计数和引用计数器的优化)也是开发者需要学习的重要内容。

    简单讲解Objective-C的基本特性及其内存管理方式

    2. 对象结构:每个Objective-C对象都有一个引用计数器,表示对象被引用的次数。初始值为1,计数为0时对象被销毁。 3. 引用计数器操作: - `retain`消息:增加引用计数。 - `release`消息:减少引用计数。 - `...

    详细描述了Object-C中的内存管理,超级简单

    随着Objective-C的发展,Apple引入了一种新的内存管理机制——自动引用计数(ARC)。ARC通过编译器自动插入必要的内存管理代码,极大地简化了内存管理的过程。使用ARC时,程序员无需显式地调用`retain`、`release`或...

    小议iOS内存管理-中文.pdf

    Objective-C采用引用计数机制管理内存。每个对象内部维护一个计数器,记录其被引用的次数。`init`, `new`, 和 `copy` 方法会增加引用计数。当对象不再被任何指针引用,即引用计数降为零时,系统将调用`dealloc`方法...

    ios_assign,retain和copy详解

    Objective-C采用引用计数(Reference Counting)的方式来管理内存,这意味着对象维持一个引用计数器来记录有多少对象拥有它。当对象的引用计数降至0时,对象会被销毁。在非自动引用计数(ARC)环境下,开发者需要...

    ios 笔试题

    - Objective-C是一种面向对象的语言,它是C语言的超集,添加了消息传递机制和类定义等面向对象特性。 - 对象的创建:`[[类名 alloc] init];` 这个过程包括了内存分配和初始化。 - 类与对象的关系:类是对象的蓝图...

    Object-C学习大纲.pdf

    #### 九、自动引用计数(ARC) - **简介**:ARC 是 iOS 5 之后新增的功能,自动管理内存。 - **基本原理**:编译器自动插入 retain、release、autorelease 语句。 - **注意事项**: - 不应手动调用 release、...

    Cocoa夜未央第四期-老jar

    - **初始化**:每个对象被创建后,其引用计数器初始化为1。 - **增加引用计数**:通过调用`retain`方法增加对象的引用计数。 - `[someObj retain];` - **减少引用计数**:通过调用`release`方法减少对象的引用计数...

Global site tag (gtag.js) - Google Analytics