學習筆記 OC核心語法

2021-06-30 16:59:20 字數 3943 閱讀 6840

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...