1、利用點語法替換set方法和get方法
方法呼叫:
student *stu = [student new];
[stu setage:100];
int age = [stu age];
點語法
stu.age = 100;
int age = stu.age;
2、點語法的本質
其實點語法的本質還是方法呼叫
當使用點語法時,編譯器會自動展開成相應的方法
3、死迴圈注意
- (void) setage:(int)age
二、成員變數的作用域
1、基本概念
區域性變數、全域性變數都有自己的作用域,成員變數也不例外。
2、型別
@private:只能在當前類的實現@implementation中直接訪問
@protected:可以在當前類以及子類的實現@implementation中直接訪問
@public:任何地方都可以直接訪問
@package:同乙個「體系內」(框架)可以訪問,介於@private和@public之間
3、@implementation補充
沒有@inte***ce,只有@implementation,也可以開發乙個類
三、@property/@synthesize
@property:setter和getter宣告
@synthesize:setter和getter實現
@property age 相當於- (void)setage:(int)age;
- (int)age;
@synthesize age = _age相當於- (void)setage:(int)age;
- (int)age
//生成的成員變數是 private
較新的版本後@property代替@synthesize
@property
功能:1、生成_age的get,set宣告
2、生成_age的get,set實現
3、生成_age成員變數(private)注:可以自己新增int _age ,這時為protected
id:萬能指標:相當於object *
內部:typedef struct objc object
*id
構造方法:
用來初始化物件的方法,初始化預設為0。
new方法:1、呼叫alloc類方法
2、呼叫init物件方法
[[person alloc] init]//返回person類的物件
重寫init
- (id)init
1、一定要呼叫super的init方法:目的初始化父類中成員變數和其他屬性。
總結:
物件方法:「—」開頭
目的:讓物件建立出來,成員變數就會有一些固定的值
注意:先呼叫父類的構造方法[super init]
再進行子類內部成員變數初始化
自定義構造方法
物件方法「—」開頭
返回值一般是「id」
方法名一般以init開頭
例如:- (id)initwithname:(nsstring *name);
如何在不改變原來類模型的前提下,給類擴充一些方法?有2種方式 繼承
分類(category)
分類的宣告
@inte***ce 類名 (分類名稱)
// 方法宣告
@end
分類的實現
@implementation類名 (分類名稱)
// 方法實現
@end
乙個龐大的類可以分模組開發
乙個龐大的類可以由多個人來編寫,更有利於團隊合作
給nsstring增加乙個類方法:計算某個字串中阿拉伯數字的個數
給nsstring增加乙個物件方法:計算當前字串中阿拉伯數字的個數
category可以訪問原始類的例項變數,但不能新增變數,只能新增方法。如果想新增變數,可以考慮通過繼承建立子類
category可以實現原始類的方法,但不推薦這麼做,因為它是直接替換掉原來的方法,這麼做的後果是再也不能訪問原來的方法
多個category中如果實現了相同的方法,只有最後乙個參與編譯的才會有效
其實類也是乙個物件,是class型別的物件,簡稱「類物件」
class型別的定義
typedef
struct
objc_class *class;
類名就代表著類物件,每個類只有乙個類物件
+load
在程式啟動的時候會載入所有的類和分類,並呼叫所有類和分類的+load方法
先載入父類,再載入子類;也就是先呼叫父類的+load,再呼叫子類的+load
先載入元原始類,再載入分類
不管程式執行過程有沒有用到這個類,都會呼叫+load載入
+initialize
在第一次使用某個類時(比如建立物件等),就會呼叫一次+initialize方法
乙個類只會呼叫一次+initialize方法,先呼叫父類的,再呼叫子類的
class c = [person
class];//
類方法或者
person *p = [person
new];
class c2 = [pclass];//
物件方法
class c = [person
class];
person *p2 = [cnew];
使用nslog和%@輸出某個物件時,會呼叫物件的-description方法,並拿到返回值進行輸出
使用nslog和%@輸出某個類物件時,會呼叫類物件+description方法,並拿到返回值進行輸出
重寫-description或者+description方法即可
如果在-description方法中使用nslog列印self
每個類的方法列表都儲存在類物件中
每個方法都有乙個與之對應的sel型別的物件
根據乙個sel物件就可以找到方法的位址,進而呼叫方法
sel型別的定義
typedef
struct
objc_selector *sel;
sel s =@selector(test);
sel s2 = nsselectorfromstring(@"test");
// 將sel
物件轉為
nsstring
物件nsstring*str =nsstringfromselector(@selector(test));
person *p= [person
new]; //
呼叫物件p的
test
方法[p performselector:@selector(test)];
__file__ :源**檔名
__line__ :nslog**在第幾行
_cmd :代表著當前方法的sel
// 下面的**會引發死迴圈
- (void)test
oc學習筆記(一)基本語法
一 oc 簡介 c語言的基礎上,增加了一層最小的物件導向語法 完全相容c語言 可以在oc 中混入c語言 甚至是c 可以使用oc開發mac os x平台和ios平台的應用程式 二 oc語法 1.關鍵字 基本上所有關鍵字都是以 開頭 下面列舉一些常見的關鍵字,看一眼就行了,不用去翻資料查詢它們的含義 i...
OC 核心語法2 構造方法
定義 用來初始化物件的方法,是個物件方法。開頭 目的 為了讓物件建立出來,成員變數就擁有固定值 預設是空,0 注意點 1 先呼叫父類的構造方法 eg super init 2 再進行子類內部成員變數的初始化 1 分配儲存空間 使用 alloc 給物件分配空間 返回乙個分配了空間的物件,但是沒有初始化...
JavaScript學習筆記(一) 核心語法
undefined undefined null object true false boolean 任意數字或nan number 任意字串 string 任意函式 function 任意內建物件 非函式 object 任意宿主物件 由編譯器各自實現的字串,但不是 undefined boolea...