屬性(@property)、@synthesize

来源:http://www.cnblogs.com/xs514521/archive/2016/02/22/5207621.html
-Advertisement-
Play Games

先前我們學的實例變數是這樣的 1 { 2 int _age; 3 int _height; 4 int age; 5 } 後來學屬性 1 @property int age; 看到@property 會自動編譯生成某個成員變數的setter方法和getter方法的聲明 1 - (void)setAg


先前我們學的實例變數是這樣的

1 {
2     int _age;
3     int _height;
4     int age;
5 }    

後來學屬性

1 @property int age;

看到@property 會自動編譯生成某個成員變數的setter方法和getter方法的聲明

1 - (void)setAge:(int) age;
2 - (int)age;

舉例:

@property int _age;

就會編譯生成

- (void)set_age:(int) age;

- (int)_age;

也就是說你怎麼寫實例變數就會怎麼編譯生成,為了生成標準的實例變數的setter方法和getter方法的聲明,所以屬性不要再加 _ 了,並且setAge大寫

 

既然使用@property有了實例變數的setter方法和getter方法的聲明,那麼實現就是@synthesize property

1 // 後面要求寫屬性,明確要對哪個屬性實現一下setter、getter方法
2 @synthesize age

看到@synthesize 會自動編譯生成某個成員變數的setter方法和getter方法的實現

1 - (void)setAge:(int)age {
2   _age = age;  
3 }
4 
5 - (int)age {
6   return age;  
7 }

如果硬要去訪問 _age 那個成員變數,就

@synthesize age = _age;

這樣會自動生成age的setter方法和getter方法的實現,並且會去訪問_age這個成員變數

註意:左邊的age:要實現的是age的setter方法和getter方法

   右邊的age:是在實現里去訪問_age這個成員變數,所以這樣就將屬性和實例變數聯繫在一起了

   系統規定成員變數要加 _ 修飾

 

上面的@synthesize age;沒寫後面的成員變數,會預設訪問age

此時:會自動訪問_age這個成員變數,如果不存在,就會自動生成@private類型的_age實例變數,在延展中聲明,是私有的

 

XCode4.n之後 @property 即生成聲明有生成實現

1 @property int age;

屬性是實例變數_age的一對setter、getter方法的聲明和實現

預設情況下,setter、getter方法中的實現會去訪問 _ 開頭的實例變數

 

學到這裡,就清楚了為什麼一開始我們學的時候成員變數以 _ 開頭,其實系統內部是這樣的

 


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

-Advertisement-
Play Games
更多相關文章
  • 分類:C#、Android、VS2015; 創建日期:2016-02-23 一、簡介 這一章我們主要學習Intent的基本用法,並通過例子演示如下功能: 如何啟動另一個界面; 如何獲取另一個界面的返回值; 如何利用Intent讀取圖庫中的圖片; 如何利用Intent讀取和更新通訊錄; 如何利用Int...
  • 做蘋果開發也有段很長的時間了,斷斷續續大概已經4年了【目前沒有從事這個行業】,從剛開始在北京的一家培訓公司學習iOS開發起,到找到工作,再到丟掉工作,失去信心,再到重回開發。過程複雜。今天總結一下一些常用的蘋果電腦操作和開發環境XCODE以及終端的常用命令的一些操作知識。 首先總結一下蘋果系統的操作
  • 本文目錄 UIView+WebCacheOperation UIImageView+WebCache、UIImageView+HighlightedWebCache、MKAnnotationView+WebCache UIButton+WebCache 對於視圖分類,我們最熟悉的當屬 這個分類了。通
  • 如下代碼 DrawerLayout mdrawerLayout; Button btn; ---------------------------------------------------------------------------------------------------------
  • 現象: 升級到iOS7後,UIStatusBar的出現導致現有UI界面亂掉了。 原因: 由於寫死了某些控制項的絕對位置,原先隱藏UIStatusBar的代碼沒有在iOS7中起作用 解決方法: iOS7以下版本隱藏UIStatusBar的方法: - (BOOL)application:(UIApplic
  • ListView和Adapter的使用 首先介紹一下ListView是Android開發過程中較為常見的組件之一,它將數據以列表的形式展現出來。一般而言,一個ListView由以下三個元素組成: 1、View,用於展示列表,通常是一個xml所指定的。大家都知道Android的界面基本上是由xml文件
  • 添加約束
  • 【原】FMDB源碼閱讀(一) 本文轉載請註明出處 —— polobymulberry-博客園 1. 前言 說實話,之前的SDWebImage和AFNetworking這兩個組件我還是使用過的,但是對於FMDB組件我是一點都沒用過。好在FMDB源碼中的main.m文件提供了大量的示例,況且網上也有很多
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...