iOS 屬性和成員變量的區(qū)別

屬性和成員變量都是類的構(gòu)成部分,用來保存類的數(shù)據(jù),要很好的理解他們,需要從一下幾個方面:

  • 聲明方式
  • 聲明的位置
  • 作用域和訪問的方式

1. 聲明的方式

都可以在.h 和 .m 文件中聲明,注意修飾符。
Animal.m

@interface Animal ()
@property (nonatomic, strong) NSString *mName;
@end

@implementation Animal{
@public
    NSString *mPublicMemberValue;
@private
    NSString *mPrivateMemberValue;
@protected
    NSString *mProtectedMemberValue;
@package
    NSString *mPackageMemberValue;
}

-(void)showSomething{
  NSLog(@"");
}

Animal.h

#import <Foundation/Foundation.h>

@interface Animal : NSObject{
    @public
    NSString *hPublicMemberValue;
    @private
    NSString *hPrivateMemberValue;
    @protected
    NSString *hProtectedMemberValue;
    @package
    NSString *hPackageMemberValue;
}

@property (nonatomic, strong) NSString *hName;

@end

Bird為Animal子類
Bird.h

#import "Animal.h"

@interface Bird : Animal

@end

Bird.m

#import "Bird.h"

@implementation Bird

-(void)birdShowSomething{
    NSLog(@"");
}

@end

接下來我們從一下幾個地方看下對屬性的訪問

  • 外部訪問屬性
image.png
  • 外部訪問成員變量
image.png
  • 子類訪問屬性
image.png
  • 子類訪問成員變量
image.png
image.png

總結(jié)

  1. 成員變量通過->訪問, 屬性通過.訪問
  2. 在.h中聲明的屬性,可以被子類或外部訪問。
  3. 在.m中聲明的屬性,外部(含子類)不可訪問。
  4. 在.h中聲明的成員變量:
修飾符 訪問方式
@public 都可訪問
@protected 只有子類可訪問,外部不可訪問
@private 外部(含子類)不可訪問
@package 同一個package下都可訪問
  1. 在.m中聲明的成員變量
    外部(含子類)不可訪問
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容