亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

Objective-C的入門學習筆記

2020-07-26 03:20:35
字體:
來源:轉載
供稿:網友

對于一門語言得學習,個人覺得最主要得就是其語法格式和那些關鍵字。

因為對于基本現在大多數得語言,每種語言都是一種符合人思維得方式來與計算機交流。

因此,其實每種語言中定義或是封裝好得基礎類和類庫,其實都是很相似得。

比如 int,double幾種基本類型,String,數組,集合以及字典數據類型。

因此你在編程時比如你想以字符串形式和計算機交流,那你很容易就能想到在C中可以使用String這個類,在java中也是Stirng

(當然,前提是你至少有一種同抽象級別得語言基礎),那OC呢,也有這樣一個類吧,不過是某種原因加了個前綴。

那么對于類中定義函數得使用,可能不同語言就有所不同了,首先是函數名(這個其實基本不擔心,現在得ide工具提示太強悍了,真不行你可以文檔),

其次就是函數得調用格式,我這簡單理解為語法格式得一種。

一、語法概覽

1.首先一個類的組成

這個知道C的基本沒什么說的 .h和.m文件。一個是頭文件,一個是實體文件。

OC中一般說是申明文件和實現文件

簡單來說,h文件就是整體對一個類得描述,m文件是對h文件中申明描述得實現

復制代碼 代碼如下:

// 
//  NonoAppDelegate.h 
//  MultiViews 
// 
//  Created by Nono on 12-4-19. 
//  Copyright (c) 2012年 NonoWithLilith. All rights reserved. 
// 
 
#import <UIKit/UIKit.h> 
 
@interface NonoAppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate> 

    UITabBarController *tabBarController; 
    UIWindow *window; 
 

 
@property (retain, nonatomic)IBOutlet UIWindow *window; 
@property (retain, nonatomic)IBOutlet UITabBarController *tabBarController; 
@end 

2.來看頭文件得格式和申明

#import這個關鍵字沒啥說的,java中叫導入。就是引入你當前類所要用到得依賴庫和類。

@interface 申明開頭關鍵字。 后面緊跟的是定義額類名  :后面的是繼承得類 UIResponder ,< xxxxxxxxx>有點類似于java中得接口,當然 OC中有個

更加準確得定義就叫協議 ,<>放協議類。 整個申明最后都以@end結束。

{ }里面就是常說得申明成員變量。

@property 屬性,我暫時理解為也有點成員變量的意思。 這個屬性更多是和后面得m文件中的的synthesize關鍵字有密切聯系。

(retain ,nonatomic)屬性的一些參數。這個具體可以去看文檔,估計C語言額同學應該不陌生,我不是很明確每個參數比較適合得場合。

IBOutlet 關鍵字,這個是和nib文件息息相關得,只要在nib文件中需要關聯的對象,用這個修飾(比如我nib文件中有個window控件,要和代碼中這個對象聯系起來

,那么就用這個關鍵字申明),申明完后會看到這段代碼最左端有個空心圓圈,當你和nib文件中控件關聯后,就實心圓圈了。

復制代碼 代碼如下:

// 
//  NonoAppDelegate.m 
//  MultiViews 
// 
//  Created by Nono on 12-4-19. 
//  Copyright (c) 2012年 NonoWithLilith. All rights reserved. 
// 
 
#import "NonoAppDelegate.h" 
 
@implementation NonoAppDelegate 
 
@synthesize window; 
@synthesize tabBarController; 
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

  //  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
   // self.window.backgroundColor = [UIColor whiteColor]; 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 

@end

3.實現文件

implmentationxxx    @end。這個不用說了吧。

@synthesize 這個關鍵字有點意思。這個關鍵字得表示法后,編譯器就自動隱式生成一個setter和getter,OC上得說法來說就是自動實現一個

存取方式。然后我們知道,oc語言這個習慣方式,一個方法和屬性在使用前都必須有個申明,就是 h和m文件這個構造啦。那對于h頭文件中property

我們是不是可以理解,這是對編譯器得一個申明,我將在實現文件中實現這個對象得存取方法,而在m實現時只不過我們一個關鍵字后讓編譯器去做了這個事。

4.例子最后說下OC中對象得方法得調用

比如在java中我要調用 a對象的functionA()方法,直接用得點表示法  a.functionA();

在OC中有點奇特表示成 [a  functionA],如果方法呀傳參數,那么緊跟著 functionA :obj


二、關鍵字
1.NS前綴。OC得大部分類都有這個前綴。要理解緣由,可以去看OC得歷史。

2.Bool 這個數據類型有點改動,在常見得語言中都是true和false,OC是YES和NO。

3.@protocol關鍵字,這個是申明協議類時,和@end連用,看字面意識就知道了。

對于協議我們上面提到,有點類似于java中得接口,當眾所周知,接口中申明得方法必須全部實現。java中當然對這樣一個強自行手段有引申出

抽象abstract這個類來對這種強制手段一個緩和,OC中則直接在協議類中申明了這一點,對于有些方法不需要強制實現,可選得,用了optional。

這個你可以具體隨意跳入喲個協議類看就好了,相信在以后更多代碼接觸后會有個更深得理解。

4.對于剛接觸oc語言得人可能有個小疑惑得類型 (id),這個可以理解為java語言中得泛型。

三、OOP思想

面向對象這個概念性東西大家應該都有。

什么繼承,封裝,多態這些就跟背單詞一樣。但是,簡單的還是需要用大白話能說出來的。

先說封裝:封裝我覺得其實是oop思想最原始的一個基礎。封裝的引入后,才能衍生出對象這一概念。我們把一個物體和它擁有的屬性和更能包裝起來,是一個抽離然后融合的過程。

繼承:繼承從字面句很好了解,兒子繼承父親。一個物體派生出一個新的物體。當然,繼承后的很多特性,你可以背書去。

多態:多態其實更好解釋了,聽字面,多種形態?一個事物的多種實現(當然,這個可能很直觀很字面,但是從嚴謹性上來說是錯誤的)因為一個物體的多種實現,怎么

看怎么聽都是像繼承啊,比如我有個魚類,那么我可以派生一個鯊魚類和一個鯨魚類,那對于這個做法來說,感覺是繼承啊。其實他們的本質思想都是差不多的,

只是側重點的不同。繼承更像表達一個物體派生一個新物體,多態則是一個物體派生出多個物體對改物體的不同實現,這個實現最直接的方式就是對超類中方法的不同的覆寫和實現。比如魚類,有個eat()方法,派生的鯊魚類,我們都知道鯊魚吃肉,那么我們可以實現鯊魚的eat方法是吃肉的,藍鯨我們算他雜食吧,那么藍鯨的eat方法則是實現雜食吃法。此時你就可以站在一個全面的角度簡單的看到多態這個概念了。

對于深入理解OOP這個思想定義,其實就類似于看你對待事物抽象的高度。

四、新事物的或者說一個新類產生的集中方式

1.最原始得一種,就是我們自己抽象定義除一個類。比如定義最原始的類,在java和OC中都存在這樣一個原始類Object。

2.繼承而來派生出一個新類。這個很好理解。比如從人類Human衍生出男人類 Man,

3.還有一種是我們比較少明確意識到,但是其實是很常用到方法:復合,既用幾個不同的類來復合成一個新類。最常用就以書上例子解釋 ,Car 汽車類,

簡單我們可以用Engine引擎和Tires輪子來構造成最簡單的Car模型。


五、OC中類別和非正式協議概念

1.category,類別應該算是OC獨有的一個術語,書上給類別的定義是:一種為現有類添加新方法的一種方式。

其實這個方式怎么聽怎么像創建子類就可以做到的概念。

是的,為一個類做擴展,我們最常想到的方法就是為其創建一個子類,然后添加你需要擴展的新方法等。

但是在OC中有時這樣并不方便,書上舉例了一個NSString的例子。原話是這樣的:

/**********

當希望為新有類添加新的行為時,我們通常會創建子類。

但是有時子類并不方便。例如,你可能會希望為NSString類新增一些新行為,但是你知道,NSString實際上只是一個類簇的前臺表示,因而無法

為這樣的類創建子類。省略1000字。

********/

好了,從上面我們基本知道,創建子類這個方法是有局限性的對吧。上面引入一個概念叫類簇。

字面意思(一簇鮮花,就是許多朵花扎成一束呈現出來,里面的具體其實我們是不知道的。)

類簇其實也算是個不大不小的概念。集體可以看官方文檔 http://www.apple.com.cn/developer/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_9.html

鄙人也是新接觸這玩意兒,里面有這么一句話:

/*****

類簇將一些私有的、具體的子類組合在一個公共的、抽象的超類下面。

****/

我不知道是不是可以理解。類簇包含的成分是帶有私有性質的,但我們都知道,繼承后的子類是不能訪問父類的私有成員的(這個應該沒錯吧?)

那么我們在新創建的子類添加的新方法就無權限訪問那些東西咯。

好吧,以上是個人理解,這東西也是聽拗口的,具體詳情可以參考更多官方文檔。

那么,好了,我們大體上知道OC引入類別這個機制的原因了。配合上OC動態運行時的分配機制,你可以為現有類添加新的方法,嘿,這

聽起來很酷?。〞显挘?/p>

類別創建:

復制代碼 代碼如下:

@interface  NSString(NumberConvenience)
-(NSNumber *)lengthAsNumber;
@end//NumberConvenience

聲明有兩個特點:
     (1)現有的類位于@interface關鍵字之后,其后是位于圓括號中的類別名稱。類別名稱是NumberConvenience,而且該類別將向NSString類中添加方法。換句話說:“我們向NSString類中添加一個名稱為NumberConvenience的類別?!蓖悇e有唯一性,但是可以添加任意多的不同名類別。
     (2)可以執行希望向其添加類別的類以及類別的名稱,還可以列出添加的方法
        不可以添加新的實例變量,類別生命中沒有實例變量部分。

類別的實現基本和一般類的實現一樣。

非正式協議和委托:非正式協議概念其實就是類別的另一種表達方式“這里有一些你可能希望實現的方法,你可以使用他們更好的完成工作”。

這個意思是,這些是可選的。比如我門要一個更好的方法,我們就會申明一個這樣的類別去實現。然后你在后期可以直接使用這些更好的方法。

這么看,總覺得類別這玩意兒有點像協議的可選協議。

可選協議只不過是有先見之明,類別是后期補救。共同一點時,對于方法實現都是可選的??蛇x協議有關鍵optionnal申明了,類別則你像高效方法你就申明,

不想就算了。

之后是委托,算OC中一個很重量級的概念。據說深入后會發現很多東西,主要鄙人目前還只接觸幾天,對于它在oc中整體的設計模式理論還是不太了解。

只是在寫例子代碼時,怎么看怎么覺得就如java中的監聽和回調??赡芤玫睦斫猓沁€是要更多的接觸代碼才能會有個深刻的理解。


六、內存管理的改變

只所以說內存管理的改變,是以前一直說c和c++成員的在工作中最需要注意的問題就是內存管理。

在接觸ios5.1前,網上看了大部分資料,內存管理都有很重要的戲份。

只是,當我學習時,發現,這塊被淡化了。

現在版本的新特性引入了ARC機制。感覺完全變的和java一樣了。

在創建項目選者ARC選項后,你會發現在代碼中你根本不用手動去釋放內存了。release什么都被劃掉了 = =。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情久久久| 中文字幕在线视频日韩| 久久久国产精品x99av| 伊人av综合网| 国产婷婷成人久久av免费高清| 欧美性猛交xxxx乱大交| 欧美精品激情在线| 毛片精品免费在线观看| 国产91精品青草社区| 91久久久亚洲精品| 一本久久综合亚洲鲁鲁| 日韩精品极品视频免费观看| 最近中文字幕日韩精品| 国产欧美精品一区二区| 中文字幕亚洲欧美日韩高清| 在线亚洲男人天堂| 另类少妇人与禽zozz0性伦| 国产日韩av在线播放| 国产精品日韩在线播放| 欧美国产日韩xxxxx| 国产一区二区三区高清在线观看| 亚洲美女激情视频| 亚洲成人久久电影| 日韩精品在线电影| 51精品国产黑色丝袜高跟鞋| 国产精品pans私拍| 久久久久久91香蕉国产| 亚洲日韩欧美视频| 亚洲激情视频在线播放| 国产免费一区二区三区香蕉精| 亚洲人成欧美中文字幕| 欧美一区亚洲一区| 国产视频久久久久久久| 亚洲成人网在线观看| 国产精品欧美久久久| 国产亚洲欧洲黄色| 中文字幕欧美国内| 欧美日产国产成人免费图片| 日韩在线免费观看视频| 国产精品999999| 97在线视频免费观看| 欧美精品久久久久久久久| 国产精品中文字幕在线| 国产亚洲精品成人av久久ww| 国产精品青青在线观看爽香蕉| 久久久精品视频在线观看| 日韩欧美极品在线观看| 国产精品自拍视频| 欧美激情喷水视频| 国产主播欧美精品| 亚洲精品国产综合区久久久久久久| 国产亚洲精品久久久| 久久人人爽国产| 91最新国产视频| 亚洲精品999| 国产精品成人v| 精品久久久久久国产91| 精品美女国产在线| 九九热精品视频在线播放| 国产国语刺激对白av不卡| 久久在线免费视频| 亚洲摸下面视频| 亚洲在线免费观看| 欧美丰满少妇xxxx| 亚洲久久久久久久久久久| 亚洲成人激情小说| 88xx成人精品| 日韩精品中文字幕久久臀| 亚洲欧美精品一区二区| 亚洲国产美女精品久久久久∴| 色噜噜亚洲精品中文字幕| 亚洲国产精品大全| 国产精品亚洲一区二区三区| 91成人在线视频| 91精品国产自产在线老师啪| 在线成人免费网站| 欧美在线视频在线播放完整版免费观看| 欧美俄罗斯性视频| 亚洲精品电影网在线观看| 激情懂色av一区av二区av| 国产在线视频2019最新视频| 亚洲少妇激情视频| 欧美裸体xxxx极品少妇软件| 国产一区二区三区在线播放免费观看| 欧美黄色免费网站| 中文字幕一区二区精品| 日日骚久久av| 国产精品一区二区三区毛片淫片| 国产福利精品av综合导导航| 国产精品久久久久高潮| 中国日韩欧美久久久久久久久| 欧美精品免费在线| 日韩av色综合| 亚洲精品视频网上网址在线观看| 亚洲性69xxxbbb| 欧美午夜性色大片在线观看| 欧美激情视频一区| 福利二区91精品bt7086| 国产精自产拍久久久久久| 久久久久五月天| 亚洲欧美综合区自拍另类| 国内精品国产三级国产在线专| 成人激情春色网| 91超碰中文字幕久久精品| 久久全国免费视频| 欧美成人黄色小视频| 成人性生交大片免费看小说| 亚洲字幕一区二区| 日本三级韩国三级久久| 国产欧美精品在线播放| 久久久爽爽爽美女图片| 日韩美女av在线免费观看| 激情亚洲一区二区三区四区| 亚洲欧美中文日韩v在线观看| 亚洲激情免费观看| 亚洲图片欧美午夜| 91精品国产电影| 午夜精品三级视频福利| 亚洲激情视频在线观看| www.日韩视频| 亚洲精品国产综合久久| 欧美在线免费看| 日韩电影大片中文字幕| 亚洲人成亚洲人成在线观看| 国产啪精品视频| 成人字幕网zmw| 在线亚洲欧美视频| 国产欧美日韩中文字幕在线| 日韩激情av在线免费观看| 91亚洲精华国产精华| 日韩一区二区欧美| 欧美成人午夜激情视频| 中文字幕日韩av电影| 国产一区二区日韩| 国产精品成熟老女人| 中文字幕日韩欧美精品在线观看| 成人av在线网址| 精品日韩美女的视频高清| 国产成人精品久久二区二区| 国产精品久久久久9999| 国产美女久久精品| 国产精品福利观看| 久久全球大尺度高清视频| 欧美精品日韩www.p站| 久99久在线视频| 亚洲成人黄色在线观看| 亚洲区一区二区| 黄色一区二区在线观看| 欧美极品少妇与黑人| 久久精品影视伊人网| 中国china体内裑精亚洲片| 久久国产精品电影| 日韩在线精品一区| 欧美最顶级的aⅴ艳星| 亚洲国产成人91精品| 北条麻妃一区二区三区中文字幕| 久久激情视频免费观看| 中文字幕在线看视频国产欧美| 欧美性猛交xxxx| 成人免费高清完整版在线观看| 亚洲欧洲xxxx| 国产香蕉精品视频一区二区三区| 欧美福利视频网站| 久久中文字幕在线|