国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Objective-C知識(shí)總結(jié)(2)

2019-11-14 18:38:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

每一個(gè)實(shí)例變量定義兩個(gè)方法:設(shè)置變量的setter方法 獲取變量值的getter方法

set方法的書(shū)寫(xiě)規(guī)范

  1. set方法一定是一個(gè)對(duì)象方法

  2. set方法一定不能有返回值

  3. set方法必須以set開(kāi)頭

  4. set之后跟的是 實(shí)例變量去掉下劃線,并且首字母大寫(xiě)

  5. set方法一定有參數(shù),而且參數(shù)的類型和實(shí)例變量的類型一致

  6. set方法的形參名 一般是 去掉下劃線的實(shí)例變量名

  7. 形參名不能和 實(shí)例變量名同名

  8. set方法實(shí)現(xiàn)中,一定要用形參給實(shí)例變量賦值

get方法的書(shū)寫(xiě)規(guī)范

  1. get方法一定是一個(gè)對(duì)象方法

  2. get方法一定有返回值,返回值的類型和實(shí)例變量的類型要一致

  3. get方法的方法名 是去掉下劃線的實(shí)例變量名

  4. get方法一定沒(méi)有參數(shù)

  5. get方法的實(shí)現(xiàn)中,一定是返回實(shí)例變量值

下面演示set和get方法的代碼

我們創(chuàng)建一個(gè)Person類在.h文件中的代碼如下:

#import <Foundation/Foundation.h>@interface Person : NSObject{    NSString *_name;    int _age;}// 成員變量_name的setter方法和getter方法的聲明- (void)setName:(NSString *)name;- (NSString *)name;// 成員變量_age的setter方法和getter方法的聲明- (void)setAge:(int)age;- (int)age;@end

.m文件中的代碼如下:

#import "Person.h"@implementation Person// 成員變量_name的setter方法和getter方法的實(shí)現(xiàn)- (void)setName:(NSString *)name{    _name = name;    }- (NSString *)name{    return _name;}// 成員變量_age的setter方法和getter方法的實(shí)現(xiàn)- (void)setAge:(int)age{    //在這可以限制輸入的年齡是否合法    if (age >= 18) {        _age = age;    } else {        _age = 18;    }    }- (int)age{    return _age;}@end

OC中沒(méi)有方法的重載,所謂的參數(shù)多一個(gè)是因?yàn)榉椒ǖ拿Q變了,提示:do: : : :

OC中static關(guān)鍵字的使用:唯一要注意的是成員變量不能定義成static,其它時(shí)候的使用跟C語(yǔ)言中一樣,請(qǐng)看我之前的博客    >---點(diǎn)我就能看到---<

OC中的self關(guān)鍵字,self用到類方法中代表本類,self用到對(duì)象方法中表示這個(gè)對(duì)象

self修飾變量:會(huì)訪問(wèn)成員變量請(qǐng)看代碼:(依然根據(jù)Person類)在.m文件中

// 成員變量_name的setter方法和getter方法的實(shí)現(xiàn)- (void)setName:(NSString *)name{      self->speed = speed;//   self->speed等價(jià)于_name//    _name = name;    }- (NSString *)name{    return _name;}

這里再次說(shuō)一下關(guān)于面對(duì)對(duì)象的四大特性分別為

1.抽象   2.封裝    3.繼承    4.多態(tài)

抽象性:抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。比如,我們要設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng),考察學(xué)生這個(gè)對(duì)象時(shí),我們只關(guān)心他的班級(jí)、學(xué)號(hào)、成績(jī)等,而不用去關(guān)心他的身高、體重這些信息。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。過(guò)程抽象是指任何一個(gè)明確定義功能的操作都可被使用者看作單個(gè)的實(shí)體看待,盡管這個(gè)操作實(shí)際上可能由一系列更低級(jí)的操作來(lái)完成。數(shù)據(jù)抽象定義了數(shù)據(jù)類型和施加于該類型對(duì)象上的操作,并限定了對(duì)象的值只能通過(guò)使用這些操作修改和觀察。 

有關(guān)于封裝,繼承,多態(tài)請(qǐng)看我之前的博客(還介紹了分類)    >---請(qǐng)點(diǎn)擊這里---<

成員變量修飾符的介紹

  • @public     公開(kāi)的, 在任何地方通過(guò)實(shí)例對(duì)象都可以訪問(wèn)
  • @PRivate    私有的,表示只能在當(dāng)前類中使用  不可以在子類中使用 但是被子類繼承的

  • @protected  受保護(hù)類型,表示只能在當(dāng)前類和子類中訪問(wèn)(默認(rèn)是protected)

description方法:重寫(xiě)父類的description方法可以改變NSLog的輸出

如果在-description方法中使用NSLog打印self 會(huì)造成死循環(huán)

代碼如下

//重寫(xiě)父類的description-(NSString *)description{  //  do something....  // 例如  return [NSString stringWithFormat:<#(NSString *), ...#>];}

類的本質(zhì)是對(duì)象 

類對(duì)象屬于Class類型

// 獲取類對(duì)象的2種方式Class c = [Person class]; // 類方法// 或者Person *p = [Person new];Class c2 = [p class]; // 對(duì)象方法

類方法中不能調(diào)用成員變量

SEL

1.方法的存儲(chǔ)位置

  • 每個(gè)類的方法列表都存儲(chǔ)在類對(duì)象中
  • 每個(gè)方法都有一個(gè)與之對(duì)應(yīng)的SEL類型的對(duì)象
  • 根據(jù)一個(gè)SEL對(duì)象就可以找到方法的地址,進(jìn)而調(diào)用方法
  • SEL類型的定義
typedef struct objc_selector     *SEL;

2.SEL對(duì)象的創(chuàng)建

SEL s = @selector(test);SEL s2 = NSSelectorFromString(@"test");

3.SEL對(duì)象的其他用法

// 將SEL對(duì)象轉(zhuǎn)為NSString對(duì)象NSString *str = NSStringFromSelector(@selector(test));Person *p = [Person new];// 調(diào)用對(duì)象p的test方法[p performSelector:@selector(test)];

OC中的點(diǎn)語(yǔ)法 是Xcode的特性,Xcode幫我們做代碼替換

// Xcode會(huì)幫我們把下面的代碼替換成[person setAge:18];person.age = 18;// Xcode會(huì)幫我們把下面的代碼替換成[person age];int a = person.age;

@property 和 @synthesize

@property 編譯器指令,編譯器幫我們會(huì)進(jìn)行_age _name get/set方法的聲明

@synthesize幫我們實(shí)現(xiàn)了 實(shí)例變量的get和set方法

Xcode4.4之后@property既可以幫我進(jìn)行_age _name get/set方法的聲明,也可以實(shí)現(xiàn)實(shí)例變量的get和set方法

@property (nonatomic, assign) int age;@property (nonatomic, copy) NSString *name;

id是萬(wàn)能指針,可以指向任何對(duì)象

OC中的構(gòu)造方法

重寫(xiě)構(gòu)造方法,讓對(duì)象創(chuàng)建成功后,就有初始的值

OC中給對(duì)象進(jìn)行初始化的方法是:init對(duì)象方法  該方法返回的是一個(gè)對(duì)象(調(diào)用init方法的對(duì)象)

// 當(dāng)子類把父類的init覆蓋了,這是默認(rèn)的先執(zhí)行子類的- (instancetype)init{    //先讓父類把父類原來(lái)做的事情做完    self = [super init];        //判斷父類是否初始化成功    if (self) {                //此處寫(xiě)子類初始化的內(nèi)容        _age = 18;  //給年齡設(shè)置為默認(rèn)值 18歲            }        return self; //self指代的事方法的調(diào)用者}

自定義構(gòu)造方法

.h文件代碼如下

#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, copy) NSString* name;@property (nonatomic, assign) int age;// 自定義構(gòu)造方法- (instancetype)initWithName:(NSString *)name andAge:(int)age;@end

.m文件代碼如下

#import "Person.h"@implementation Person- (instancetype)initWithName:(NSString *)name andAge:(int)age{    if (self = [super init]) {        _name = name;        _age = age;    }    return self;}@end

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湄潭县| 西安市| 云梦县| 凯里市| 油尖旺区| 扎鲁特旗| 谷城县| 郓城县| 南通市| 九台市| 勐海县| 临泉县| 隆尧县| 桐乡市| 齐齐哈尔市| 兰西县| 隆昌县| 连江县| 申扎县| 铜川市| 裕民县| 定南县| 来安县| 济阳县| 平和县| 翼城县| 嘉定区| 高台县| 镇原县| 调兵山市| 六枝特区| 曲阜市| 罗源县| 冷水江市| 吉木乃县| 衡水市| 南涧| 余姚市| 鞍山市| 宿州市| 观塘区|