`

Object c强引用与弱引用

阅读更多
strong weak
strong与weak是由ARC新引入的对象变量属性
ARC引入了新的对象的新生命周期限定,即零弱引用。如果零弱引用指向的对象被deallocated的话,零弱引用的对象会被自动设置为nil。

@property(strong) MyClass *myObject;
相当于@property(retain) MyClass *myObject;

@property(weak) MyOtherClass *delegate;
相当于@property(assign) MyOtherClass *delegate;

强引用与弱引用的广义区别:
  强引用也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示列表中,则此对象会被从内存中释放。
  弱引用除了不决定对象的存亡外,其他与强引用相同。即使一个对象被持有无数个若引用,只要没有强引用指向他,那麽其还是会被清除。没办法,还是 “强哥” 有面子。

简单讲strong等同retain
weak比assign多了一个功能,当对象消失后自动把指针变成nil,好处不言而喻。

__weak, __strong 用来修饰变量,此外还有 __unsafe_unretained, __autoreleasing 都是用来修饰变量的。
__strong 是缺省的关键词。
__weak 声明了一个可以自动 nil 化的弱引用。
__unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
__autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。
分享到:
评论

相关推荐

    Object C扫描版PDF

    - **强引用(strong)**:默认的引用计数策略,保持对象的引用,直到没有强引用指向该对象。 - **弱引用(weak)**:不会增加对象的引用计数,常用于防止循环引用。 - **无主引用(unowned**):类似弱引用,但...

    Object-C语言教程0220.zip

    弱引用与强引用 在ARC环境下,`strong`和`weak`关键字分别表示强引用和弱引用。强引用可能导致循环引用,而弱引用则避免了这种情况。 ### 四、Foundation框架 Objective-C的Foundation框架提供了大量基础类,如...

    Object-C内存管理2-对象之间的内存管理

    3. 无主引用:无主引用(unowned reference)与弱引用类似,不增加对象的引用计数,但无主引用假设对象在其生命周期内始终存在。无主引用通常用于表示两个对象生命周期紧密关联的情况。 三、内存管理的规则 1. 谁...

    object-c内存管理与实例

    - 强引用(Strong Reference)与弱引用(Weak Reference):在ARC中,可以使用`strong`和`weak`关键字来声明变量。`strong`是默认的,表示强引用;`weak`表示弱引用,不增加对象的引用计数,当对象被其他强引用全部...

    object-C内存管理

    在Objective-C中,每个对象都有一个引用计数,表示指向该对象的强引用数量。当对象被创建时,它的引用计数为1。每当有新的强引用指向该对象,引用计数加1;相反,当一个强引用失效,引用计数减1。当对象的引用计数...

    object-c 基础教程

    1. **强引用(Strong)**: 默认的引用类型,增加对象的引用计数。 2. **弱引用(Weak)**: 不增加对象的引用计数,当对象被释放时,弱引用会自动设为nil。 3. **自动释放池(Autorelease Pool)**: 在...

    object c 入门教程,非中文版,英文版

    2. 强引用与弱引用: - 强引用:默认情况下,对象间的引用是强引用,会增加对象的引用计数。 - 弱引用:不会增加对象的引用计数,当没有其他强引用指向对象时,即使有弱引用,对象也会被释放。 三、类别...

    Object-C 学习笔记

    3. **强引用(Strong)、弱引用(Weak)和无主引用(Unowned)**:ARC中提供了不同类型的引用,以避免循环引用问题。 ### 四、Objective-C与Cocoa Touch 在iOS开发中,Objective-C常常与Cocoa Touch框架结合使用,...

    objectC类的声明和实现

    - `strong`:表示对属性对象的强引用,意味着只要有一个`strong`引用指向某个对象,该对象就不会被释放。 - `readonly`:表示该属性是只读的,只能通过初始化或在类内部设置值。 - `assign`:通常用于基本类型或C...

    Learn Object-C

    - 弱引用与强引用的区别 - 循环引用问题及其解决方案 - 手动内存管理的基本原则(适用于旧版本的Objective-C) 5. **高级主题** - KVC(Key-Value Coding)与KVO(Key-Value Observing) - GCD(Grand Central ...

    object-c课件

    2. **强引用(strong)**:默认的引用类型,增加对象的引用计数。 3. **弱引用(weak)**:不增加对象的引用计数,用于打破循环引用。 4. **无主引用(unowned)**:适用于生命周期与持有者相同的场景,不会导致内存...

    C语言实现COM组件

    另外,`unregiexample`则是注销组件的工具,它会从注册表中删除与组件相关的条目,确保当组件不再需要时,系统可以正确清理资源。 在C语言实现COM组件时,我们还需要关注线程安全和进程间通信(IPC)。COM支持多...

    ios object-c 面试试题 及答案

    属性的类型通常使用`assign`,除非对象需要保留对代理的强引用,这时使用`strong`。如果代理遵循协议并需要在协议方法中修改自身,可能会使用`weak`来防止循环引用。`copy`通常用于需要保持原始数据不变的情况,不...

    object-c初学者中文教程 附源码 iPhone开发必读

    1. **内存管理**:Objective-C使用引用计数(ARC)自动管理内存,但开发者仍需理解内存管理的基本原则,如强引用、弱引用和autoreleasepool。 2. ** Blocks**:Blocks是Objective-C的一个强大特性,允许在代码中...

    From C++ To Object-C(中文版

    与C++相比,Objective-C具有更强的动态特性。Objective-C的消息传递机制使得对象可以在运行时动态地接收消息,这意味着对象的行为可以在程序执行过程中改变。这种动态性是Objective-C的一个重要特点,但也可能带来...

    Object-C-关于Object-C的学习介绍了解

    ### Objective-C 学习介绍与理解 #### 一、Objective-C 概述 Objective-C 是一种结合了 C 语言和面向对象编程特性的混合型编程语言。它最早由 Brad Cox 和 Tom Love 在 1980 年代初开发完成,并在 NeXT 公司的 ...

    Object pascal中文参考手册

    Object Pascal 是一种高级编译语言,具备强类型特性,支持结构化和面向对象编程。其优势在于代码的可读性、快速编译和模块化编程,通过使用多个单元文件实现。 **使用 Object Pascal** 主要是通过 Borland 公司的...

    iOS企业培训视频Object-C基础等教程 就业班全套课程 从基础到就业不是梦

    ### iOS企业培训视频Object-C基础等教程就业班全套课程知识点概览 #### 一、基础知识篇 ##### 1.1 iOS开发概述 - **iOS系统介绍**:了解iOS操作系统的特性和版本发展历史。 - **iOS开发环境搭建**:安装Xcode集成...

    ARC探秘:Objective-C中的自动引用计数革命

    ARC通过引入强弱引用的概念来解决循环引用问题,其中强引用确保对象不被释放,而弱引用则允许对象在其引用计数降为0时被释放。 #### 4. 示例代码:使用ARC 下面通过一段具体的代码来展示ARC的使用: ```objc // ...

Global site tag (gtag.js) - Google Analytics