1. 程式人生 > >@property和@private及在.m檔案中宣告變數的區別

@property和@private及在.m檔案中宣告變數的區別

[email protected]在.h檔案中宣告的變數   (1)在.h檔案中使用@private宣告的成員變數,子類是可以繼承的,但不能直接訪問   (2)在.h檔案中使用@private宣告的成員變數,分類是可以直接訪問的   <a>繼承關係   Person類宣告:
  @interface Person : NSObject
{
   @private
   NSString *_name;
}
@end   


  
Person的實現:
@implementation Person
@end
子類Student的宣告:
@interface Student : Person
-(void) play;
@end


子類Student的實現:
可以看到在子類Student中繼承了父類Person的_name屬性,但是不能直接訪問 <b>分類 Person的分類宣告:
@interface Person (play)
-(void) play;
@end


Person的分類實現:
可以看到上面的分類中可以訪問Person類中@private修飾的屬性_name 2.在.m檔案中宣告變數 在.m檔案中宣告的變數是私有的,且不能被繼承和被分類訪問 例: Person類:
@implementation Person
{
   NSString *_name;
}
@end


子類Student:

分類
所以,在.m檔案中宣告的屬性是真正的私有化了, 所以,老外的一些建議是: 如果只是單純的private變數,最好宣告在implementation裡. 如果是類的public屬性,就用property寫在.h檔案裡 如果自己內部需要setter和getter來實現一些東西,就在.m檔案的類目裡用property來宣告 [email protected]宣告的變數  使用@property宣告的變數實際上就如在.m檔案中宣告的變數一樣,是真正私有化的,@property宣告的變數做了三件事,1.在.ml檔案中宣告一個@private的變數(不是在.h檔案中宣告@private變數),2.宣告setter和getter方法,3.定義setter和getter的實現      ( 1)使用@property宣告的變數,子類是不能繼承的,分類是不能直接訪問的 例: Person類的宣告:
@interface Person : NSObject
@property (nonatomic ,retain) NSString *name;
@end


Person類的實現:
@implementation Person
@end


Student子類:
Person的分類:

相關推薦

@property@private在.m檔案宣告變數區別

[email protected]在.h檔案中宣告的變數   (1)在.h檔案中使用@private宣告的成員變數,子類是可以繼承的,但不能直接訪問   (2)在.h檔案中使用@priva

error LNK2005 --類的宣告定義放在一個檔案

刷C++primer的時候,將類的宣告和定義均放在標頭檔案中,報錯error LNK2005 1> Sales_data.h 1>Sales_data.obj : error LNK2005: "public: class Sales_data & __this

SQLite3建立資料庫的方法 SQLite從Excel檔案匯入資料 python/qpython sqlite 中文 亂碼

之一 有關SQLite3使用: 1.將sqlite3.exe檔案放在任何位置(本人放在E:\Php) 2.在CMD下進入到E:\Php下(cd .. cd E:\php) PS:進入其他驅動盤不需要打cd命令,比如進入D盤打D:\就可以了。cd命令是開啟檔案目

Objective-C.h檔案、.m檔案@interface、@synthesize其它

很多開發iOS好幾年的老鳥,可能都不太分的清.h檔案和.m檔案裡各種結構的用途和區別。最近仔細研究了一下,寫一篇文章記下來。 一般的,寫一個Class的時候,經常是這種格式(以UIViewController為例): .h檔案: @interface ClassName{ NS

16-GPRS(Air202)關於多個檔案變數呼叫定時器

https://www.cnblogs.com/yangfengwu/p/9968405.html 因為自己看到好多問多個檔案呼叫的,感覺這個應該說一說 對了大家有沒有知道這個是幹什麼的    大家有沒有看這篇 https://www.cnblogs.com/yang

TensorFlow檢視checkpoint檔案變數對應值

在載入模型時, 需要知道checkpoint中變數名稱,一下程式碼可以檢視TensorFlow中checkpoint檔案中的變數名: #!/usr/bin/env python # -*- coding:utf-8 -*- import os from tensorflow.pytho

Example.java:1: 錯誤: 類 Rect 是公共的, 應在名為 Rect.java 的檔案宣告

【原始碼】 public class Rect{//Rect類     double width;     double height;     double getArea(){   

.mm檔案呼叫.m檔案函式的注意事項

 假設你有個函式 int FunA(int a),在一個.m檔案中實現,或者在一個庫檔案中。這裡的函式是單獨的函式,而不是interface的method.  那麼當你從一個.mm檔案中呼叫這個函式的時候,需要注意的一點是:  在一定要將 extern "C" 加在該函式

QTVS讀取.txt檔案的資料並儲存為陣列

QT中讀取.txt檔案並儲存為陣列 QFile fpx("/work/qt_workspace/saly/pix_x.txt"); QFile fpy("/work/qt_workspace/saly/pix_y.txt"); // QVector&l

利用numpypandas處理csv檔案的時間

環境:numpy,pandas,python3 在機器學習和深度學習的過程中,對於處理預測,迴歸問題,有時候變數是時間,需要進行合適的轉換處理後才能進行學習分析,關於時間的變數如下所示,利用pandas和numpy對csv檔案中時間進行處理。 date

linux grepsed搜尋大檔案的錯誤日誌

通常我們通過關鍵字找錯誤日誌的時候,日誌並不是每行都匹配,這樣就會顯示出部分日誌,如下面搜尋cat mylog|grep -n XXXAction的結果: 10009875:2015-02-26 14:12:13 com.interfaces.XXXAction:134 [

用記事本編寫第一個Java程式執行時 出現報錯:錯誤: 類helloworld是公共的, 應在名為 helloworld.java 的檔案宣告 public class helloworld {

在書本上盲人摸象的摸索學習Java,Java環境配置完成,安裝好eclipse後,便興沖沖的去在記事本上編寫第一個Java程式,結果給破了一盆冷水,略懵        public class helloworld {public static void main(St

python2python3向csv檔案寫入Unicode字元

1、python2向csv檔案寫入中文或者unicode,可以參考UnicodeWriter類https://blog.csdn.net/qq_16912257/article/details/521277622、python3中字串都變成了unicode編碼,並且取消了cS

[初學筆記] pause 語句 的運用,.m檔案按任意鍵繼續程式或者延遲秒數繼續程式

資料來源: 轉部落格 http://blog.csdn.net/chy19890820/article/details/8773431 http://blog.csdn.net/xingjiarong/article/details/50590685 http://blog

Matlab 將多個子函式寫到一個m檔案

一般來講,在matlab中定義多個函式,需要存成多個m檔案,每一個檔案是一個函式 但是當我們的函式過於簡單,沒有必要存成多個檔案時,我們可以將多個子函式存在一個主函式下,這樣就可以存在一個m檔案中了。 例子 新建m檔案'makefuns.m' function fun

類A是公共的,應在名為A.java的檔案宣告錯誤

一個 *.java 檔案中,只能有一個public 的類,而且這個public修飾的這類必需要和這個檔名相同. //BOSS.java public final class Boss extends Employee{ } 你把public去掉就可以了.

程式設計規則為何要求不能在.h檔案定義變數

問題背景:當你接觸C語言時,老師一定會強調一個程式設計規則:永遠不要在.h檔案中定義變數 疑惑點:是不是說在.h檔案中定義會出錯? 結論:在.h檔案中定義變數不會報錯,但是該操作會導致在多個模組中重複定義該同名變數【變數名相同,但地址不同】,與軟體邏輯不一致。 分析: 1):知識

script標籤引用js檔案變數或方法

例如專案中使用app.js檔案做如下定義: //定義變數 (function($){ window.dog = {}; })(mui); //定義方法 function run(){ console.log('呼叫js檔案中的run方法'); } 接著在html

RNN,LSTMGRUword2vecembedding等的聯絡與區別解析。

普通的MLP和CNN都沒有事件維度,可以從RNN開始引入了事件維度,這在理解上給我們帶來了一些困難,筆者為了避免遺忘,將這種區別和特點記錄如下。 (沒時間畫圖,就看文字吧,寫的比較簡單。。。) 資料 https://zhuanlan.zhihu.com/p/36455374 這

變量表宣告變數

變量表中宣告變數 首先我們要建立Variables表 ***Variable*** ${MgrloginUrl} http://localhost/mgr/login.html ${StudentLoginUrl} http://localhost/stu