oc 实例变量可见度、方法
為什么80%的碼農都做不了架構師?>>> ??
?、實例變量可?度
@public ?? ? ? ? ? ? ? ?? 在類的外部和內部均可訪問
@protected(默認) ? 只能在該類和其?類內訪問
@private ?? ? ? ? ? ? ? ? 只能在該類內訪問
?、?法(定義、聲明、調用)
OC中的方法分兩種:類方法、實例方法
?同一個類中,所有的方法中不能出現重名
?
方法的聲明
- (返回值類型)方法名:(參數類型1)參數名1 修飾詞:(參數類型2)參數名2
- (paraType)methodName:(paraType)paraName1 descripName:(paraType)paraName2
方法的調用
??類方法 + 只能類調用 [class_name class_method_name];
類方法中,不能使用實例變量(調用類方法時,沒有創建對象)
+ (void)sayHi;
??實例方法 - 只能對象調用 [object_name instance_method];
- (void)sayHello;
三、setter、getter
setter:設置實例變量的值
- (void)setName:(type)name;
getter:獲取實例變量的值
- (type)name;
OC2.0.setter
如果通過setter方法為對象設置初始值,需通過以下方式:
- (void) setOrigin: (XYPoint *) pt
{
? ? ?if (origin)
? ? ? ? ? [origin release];
? ? ?origin = [[XYPoint alloc] init];
? ? ?[origin setX: pt.x andY: pt.y];
}
原因:若不alloc,創建多個對象后,指針指向同一內存區域,修改某一個對象的origin將會改變所有對象的origin值。
四、自定義初始化方法
使用自定義初始化方法創建對象
創建對象后,不能再調用初始化方法
- (id)initWithName1:(type)name1 name2:(type)name2 …;
五、類的調用
#import "ClassName.h"
循環調用的產生:
A.h: ? ?#import "B.h"
B.h: ? ?#import "A.h"
編譯器執行時,在#import 處出現死循環,永遠執行不到@interface ,因此所導入的類不可被識別
防止循環調用
在 .h 文件中使用 @class ?ClassName; ? 告知編譯器class后面的標識符是一個類
在 .m 文件中 使用 #import 導入所需類所在文件
簡答題:
?
1、實例變量的可見度有哪幾種?默認的是什么?(中英文都要記)
@public @protected @private
2、如何對一個類的默認可見度的實例變量進行賦值和取值?
getter&setter method
3、面向對象編程的三大特征?
封裝(保證了屬性與方法的關聯性)
繼承(代碼復用)
多態(在代碼復用的同時,強化了個性差異)
4、什么是封裝?
封裝:對外提供聲明,對內隱藏內部實現
5、#import有什么作用?#import和#include有什么不同?
#include 和 #import的區別
(1)include不能重復導入同一個文件
(2)import可以重復導入同一個文件
(3)現在include和import都可以重復導入
6、對象的內存分配在哪個區?
堆區
7、堆區和棧區的區別(從內存的分配和回收考慮)
棧區由系統負責分配和回收
堆區由開發者負責分配和回收
8、OC中的方法有幾類?OC中有私有方法嗎?
兩類:類方法、實例方法
9、如何確定兩個方法是否同名?
?
10、-(id)setName:(NSString *)name ?:(NSString *)sex ?age:(int)age的方法名是什么?
setName: : age:
11、定義并實現一個實例變量的setter和getter方法。
12、#import ” ”和#import < >有什么區別?
“” 導入用戶文件
<> 導入系統文件
13、@class有什么作用?#import和@class有什么區別?
@class告知編譯器系統class后面的標識符是一個類,并沒有導入這個類的內容
#import導入文件的內容
轉載于:https://my.oschina.net/zooyf/blog/487242
總結
以上是生活随笔為你收集整理的oc 实例变量可见度、方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于 xilinx vivado 的PC
- 下一篇: python编程基础_月隐学python