1. 程式人生 > >iOS中delegate代理物件使用weak和assign哪個

iOS中delegate代理物件使用weak和assign哪個

       之前不停應用的是assign,本日除錯一段程式碼的時間,發明順序會crash失落,報錯EXC_BAD_ACCESS 經由一番研討,發明若是應用 @property (nonatomic, assign, readwrite) id delegate; 宣告一個delegate之前一直使用的是assign,今天除錯一段程式碼的時候,發現程式會crash掉,報錯EXC_BAD_ACCESS

經過一番研究,發現如果使用

@property (nonatomic, assign, readwrite) id delegate;

宣告一個delegate,那麼即便delegate指向的物件銷燬了,delegate中依然會儲存之前物件的地址

即,delegate成為了一個野指標...

而使用weak,則不會有上述問題,當delegate指向的物件銷燬後,delegate = nil,

所以答案就是,使用weak。

相關推薦

iOSdelegate代理物件使用weakassign哪個

       之前不停應用的是assign,本日除錯一段程式碼的時間,發明順序會crash失落,報錯EXC_BAD_ACCESS 經由一番研討,發明若是應用 @property (nonatomic,

iOS開發之weakassign的區別

共同點: 都可以修飾物件型別的property, 不會增加其引用計數. 不同點: 1.出現時期, assign出現在ARC之前, weak出現在ARC之後; 2.可修飾的型別, assign既可

ios的奇怪崩潰SignalEXC_BAD_ACCESS錯誤分析

奔潰 ges bad strong 分享圖片 bject 文章 原子 exc 什麽是Signal 在計算機科學中,信號(英語:Signals)是Unix、類Unix以及其他POSIX兼容的操作系統中進程間通訊的一種有限制的方式。它是一種異步的通知機制,用來提醒進程一個事

iOS的事件的產生傳遞

事件 container 步驟 -s 重難點 format 希望 接受 這也 每一次將代碼打散再串聯就是一次重構。 https://www.jianshu.com/p/2e074db792ba iOS中的事件的產生和傳遞 3.1.事件的產生 發生觸摸事件後,系

iOS的屬性傳值委託模式

    iOS中常用的傳值模式有很多中,然而我們在學習階段用的比較多的傳值方式,就是屬性傳值以及委託協議傳值,或者通知方式的傳值模式,但是,我這裡主要根據自己在學習過程中學習理解到的兩種常用傳值模式。    一是,屬性傳值模式,我簡單的根據自己在

一步一步教你理解實現iOS的鏈式程式設計函數語言程式設計

談到鏈式程式設計和函數語言程式設計,那Masonry幾乎就是最經典的代表.如: make.top.equalTo(self.view).offset(60) 像這樣top.equalTo(s

SpringAOP的joinpoint物件 targetthis方法的區別

情景如下:建立一個持久層的類gooddaoimpl用切面類 goodaspect進行功能增強--------------------------------------------------------------------------------------------

JavaScript的陣列物件屬性方法!

日常程式碼中經常會對程式碼進行一些操作,複製、排序、查詢、遍歷等等,一些陣列的方法總是記不住,所以寫篇日記總結一下。 1. 陣列的建立與賦值 建立一個數組,有三種方法。 下面的程式碼定義了一個

ios -fobjc-arc -fno-objc-arc 的使用

在非ARC工程中整合ARC程式碼:  使用-fobjc-arc來標記那些通過ARC編譯的第三方原始碼。  在ARC工程中整合非ARC的第三方程式碼,編譯庫裡面的檔案需要使用-fno-objc-arc   。 常見錯誤:  --Cast of an indirect p

weakassign關鍵字有什麼不同

首先說說在什麼情況下使用 weak 關鍵字 1、ARC中,在有可能出現迴圈引用的時候,往往要通過讓其中一端使用weak來解決,比如:delegate 的代理屬性。 2、自身已經對它有過一次強引用,所以沒有必要再強引用一次。這個時候也會使用weak;還有就是自定義IBO

iOSconst與static區別聯絡

const就是隻讀的意思,只在宣告中使用; static一般有2個作用,規定作用域和儲存方式.對於區域性變數,static規定其為靜態儲存方式,每次呼叫的初始值為上一次呼叫的值,呼叫結束後儲存空間不釋放; 對於全域性變數,如果以檔案劃分作用域的話,此變數只在當前檔案可見;對

iOS--------如何在ios運用core animation暫停繼續動畫

核心程式碼如下 //暫停layer上面的動畫 - (void)pauseLayer:(CALayer*)layer { CFTimeInterval pausedTime = [laye

iOS 的協議(protocol)代理(delegate)

# Protocol和Delegate簡介 Protocol協議類似於Java中的介面,是一個自定義方法的集合,讓遵守這個協議的類去實現為了達到某種功能的這些方法,Java中是必須選擇實現的方法,Objective-C中可以通過@optional(可選)或者@required(必須實現)來控制。De

iOSassignweak的區別

一、區別 assign與weak,它們都是弱引用宣告型別,最大的區別在那呢? 如果用weak宣告的變數在棧中就會自動清空,賦值為nil。 如果用assign宣告的變數在棧中可能不會自動賦值為nil,就會造成野指標錯誤! 二、例項 他們常用在基本型別屬性,比如BO

iOS開發-修飾代理delegateweak還是assign

1.對於strong: 該物件強引用delegate,外界不能銷燬delegate物件,會導致迴圈引用(Retain Cycles) 2.對於assing: assign是指標賦值,不對引用計數操作,使用之後如果沒有置為nil,可能就會產生野指標。

iOSdelegate的用法規範

delegate是Objective-C編寫的應用中各種物件之間互相呼叫的主要方式之一. 通常情況下, 物件可以接收的訊息都通過在介面檔案中宣告的方法來表示. @protocol MyProtocol <NSObject> - (void)func; @en

iOS 利用strong,copy,assign,weak修飾變數的異同點

ARC中 在iOS開發中定義@property屬性時,經常用到assign、weak、strong、copy等關鍵字。我們經常會考慮在何時應該使用哪個關鍵字,尤其是在面試的時候,經常會被問到這些關鍵字之間的區別,下面詳細和大家探討一下: assign:用

iosstrongweak的解釋理解

來自stackoverflow解釋的挺有意思的 Imagine our object is a dog, and that the dog wants to run away (be deallocated). Strong pointers are like a leas

IOS屬性的關鍵修飾詞:strong weak assign copy retain等。。

@property與@synthesize是成對出現的,可以自動生成某個類成員變數的存取方法。在Xcode4.5以及以後的版本,@synthesize可以省略。1.atomic與nonatomicatomic:預設是有該屬性的,這個屬性是為了保證程式在多執行緒情況,編譯器會自動生成一些互斥加鎖程式碼,避免該變

小胖說事28------iOSextern,staticconst差別使用方法

方法 string 文件 only 聲明 sans nbsp ring const 通俗的講: extern字段使用的時候,聲明的變量為全局變量,都能夠調用,也有這樣一種比較狹義的說法:extern能夠擴展一個類中的變量到還有一個類中;