記憶體管理範圍和@property

来源:http://www.cnblogs.com/ljcgood66/archive/2016/03/19/5295772.html
-Advertisement-
Play Games

管理範圍: 管理任何繼承NSObject的對象,對其他的基本數據類型無 效 本質原因是因為對象和其他數據類型在系統中的存儲空間不一樣,其它局部變數主要存放於 棧中,而對象存儲於堆中,當代碼塊結束時這個代碼塊中涉及的所有局部變數會被回收,指 向對象的指針也被回收,此時對象已經沒有指針指向,但依然存在於


管理範圍: 

管理任何繼承NSObject的對象,對其他的基本數據類型無 效 

本質原因是因為對象和其他數據類型在系統中的存儲空間不一樣,其它局部變數主要存放於 棧中,而對象存儲於堆中,當代碼塊結束時這個代碼塊中涉及的所有局部變數會被回收,指 向對象的指針也被回收,此時對象已經沒有指針指向,但依然存在於記憶體中,造成記憶體泄 露。 

page8image376.png 

 

記憶體管理的原則 

1)原則 

只要還有人在使用某個對象,那麼這個對象就不會被回收; 只要你想使用這個對象,那麼就應該讓這個對象的引用計數器+1; 當你不想使用這個對象時,應該讓對象的引用計數器-1; 

2)誰創建,release 

(1)如果你通過alloc,new,copy來創建了一個對象,那麼你就必須調用release或者 autorelease方法
(2)不是你創建的就不用你去負責 

3)retain,release 

只要你調用了retain,無論這個對象時如何生成的,你都要調用release 

4)總結 

有始有終,有加就應該有減。曾經讓某個對象計數器加1,就應該讓其在最後-1. 

1)空指針:沒有指向任何東西的指針,給空指針發送消息不會報錯 關於nil和Nil及NULL的區別: 

nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一個對象值。
Nil: A null pointer to an Objective-C class

NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NULL是一個通用指針(泛型指針)。 

NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values). 

[NSNull null]: The singleton instance of NSNull. 

[NSNull null]是一個對象,他用在不能使用nil的場合。 

 

@property 

@property int age; 1)生成一個_age 2)生成get和set方法的聲明 3)生成 get和set方法的實現 

@property (......) int age; 

page35image4472.png 

1)記憶體管理相關參數 

retain:對對象release舊值,retain新值(適用於OC對象類型) assign:直接賦值(預設,適用於非oc對象類型) copy:release舊值,copy新值 

驗證assign如果作用在對象上,實際上就是直接賦值 //使用@property增強型 生成get和set方法 

@property(nonatomic,assign)Car *car; /* 

.m文件中實際上生成的是
_car = car; //當對象release後,將無法使用該對象 

*/ 

page36image5672.png 

@property 參數(二) 

1)是否要生成set方法(若為只讀屬性,則不生成

readonly:只讀,只會生成getter的聲明和實現 readwrite:預設的,同時生成setter和getter的聲明和實現 

2)多線程管理(蘋果在一定程度上屏蔽了多線程操作

nonatomic:高性能,一般使用這個 atomic:低性能,預設 

3)setget方法的名稱 

修改set和get方法的名稱,主要用於布爾類型。因為返回布爾類型的方法名一般以is開頭,修改名稱一般用 在布爾類型中的getter。 

@property(nonatomic,assign, setter=abc:,getter=haha)int age 可以理解為把[psetAge:]------>[pabc:], [page] --------->[phaha]; 

@property(nonatomic,assign, setter=setVip:,getter=isVip) BOOL vip; 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天做了個微博發佈欄的效果,涉及到的知識點包括以下: 1.判斷IE的方法:直接用 var ie=!-[1,];即可 2.連續發生事件的用法: IE下:觸發對象.onpropertychange 標準下:觸發對象.oninput 3.焦點聚集和移開事件。onfocus和onblur 4.判斷單位元組(0
  • 在寫網頁過程中,會遇到這種需要多個圖標展示: 如上圖中的「女裝」文字左邊的圖標。容易想到的解決方法是為每張圖片加入<img>標簽,但這樣做會增加HTTP請求數量,影響網站載入速度。比這更優的解決方案是:雪碧圖sprite。 所謂雪碧圖就是把我們所需要的所有小圖片用CSS sprite或者PS工具拼接
  • 1、讓用戶輸入兩個數字,然後輸出相加的結果。 *prompt() 方法用於顯示可提示用戶進行輸入的對話框。 語法: 說明: 如果用戶單擊提示框的取消按鈕,則返回 null。如果用戶單擊確認按鈕,則返回輸入欄位當前顯示的文本。 在用戶點擊確定按鈕或取消按鈕把對話框關閉之前,它將阻止用戶對瀏覽器的所有輸
  • 三種情況:1、行內元素(文本、圖片等) 給父元素設置text-align:center;來實現 2、定寬塊狀元素 3、不定寬塊狀元素(3種方法) (1)為需要水平居中的元素加table標簽;然後為table設置樣式: table{margin:0 auto;} (2)將塊級元素轉換為內聯元素(eg:
  • 引言 使用JavaScript能夠完整迅速做出Web應用程式,目前一套工具包括MongoDB、ExpressJS,AngularJS和Node.js越來越受到歡迎,其開發的靈活性和易用性加快開發效率,簡化開發者的工作。 在今天你有很多架構可以選擇建立一個Web應用,你需要的是快速開發,提高效率和註重
  • 整理了JavaScript中函數Function的各種,感覺函數就是一大對象啊,各種知識點都能牽扯進來,不單單是 Function 這個本身原生的引用類型的各種用法,還包含執行環境,作用域,閉包,上下文,私有變數等知識點的深入理解。 函數中的return Function類型函數實際上是對象,每個函
  • 問題 在ios 9中使用HTTP請求,Xcode就會拋出下麵的Exception: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...