2011-09-29 96 views
-1

我其實是xcode的newby。我可以自己做出一些事情,但對某些事情做些什麼以及爲什麼放在那裏有疑問。我試圖閱讀許多電子書,看了教程,但他們從來沒有進入基礎知識,總是說「加這個,點擊這裏等」xcode基本解釋需要

有人可以給我幾個問題的答案請。 好吧,我知道一個iOS應用程序大部分是由視圖,視圖由控制器控制。每個控制器都有一個頭文件(.h)和一個模塊類?文件(.m)。 .h文件包含.m文件中使用的變量和函數的聲明。 整個應用程序由一個名爲「代表」的主控制器控制。 .h文件中的定義可能是例如一個動作IBAction或IBLabel或其他東西。

什麼引發的問題對我來說是例如這些行:

@class FlipsideViewController; 

@protocol FlipsideViewControllerDelegate 
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; 
@end 

@interface FlipsideViewController : UIViewController 

@property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate; 

- (IBAction)done:(id)sender; 

,爲什麼有時會在另一個視圖控制器委託類加載

@class MainViewController; 

什麼下面呢,意思是什麼@interface聲明?

@interface flipAppDelegate : NSObject <UIApplicationDelegate> 

是什麼

nonatomic, retain 

對不起,問真是愚蠢的問題,但每一個教程只是跳過這些東西。 我可以按照YouTube視頻或手動,但它並沒有教我很多東西......

+0

哦也 「@synthesize」 是什麼呢?這是一種向主控制器發放的方式嗎? – renevdkooi

回答

3

讓我試着回答你的問題,一次一個。

什麼是@interface聲明?

該接口聲明一個類。通過聲明一個類,我的意思是它指定了它包含的實例變量和私有/公共方法。同樣,頭文件只包含方法的聲明,並且方法的實現/主體位於模塊類中。所以,這裏 -

@interface FlipsideViewController:UIViewController中

FlipsideViewController從/子/擴展UIViewController派生。即是一種UIViewController,但增加了它自己的功能。

同樣

@interface flipAppDelegate : NSObject <UIApplicationDelegate> 

子類NSObject的並且實現了UIApplicationDelegate協議。協議基本上是一組類承諾實現的方法(儘管可以有可選的方法)。

爲什麼在另一個視圖控制器有時委託類加載

委託模式允許一個類的工作委託給一個實現委託協議另一個類。因此,FlipsideViewController保留了委託對象的一個​​實例,因此可以調用它的flipsideViewControllerDidFinish:

是什麼非原子,保留

這意味着,當你設置一個值,你的實例變量值的引用計數將遞增,並設置爲您的變量。此外,它不會作爲原子操作發生。您只需要在多線程環境中使用原子。

@synthesize只是一個快捷方式,用於爲變量生成getter和setter。

HTH,

阿克沙伊

2

您確實需要閱讀Apple提供的Objective-C Programming Language。它非常簡短,並且涵蓋了體系結構,概念和語法的基礎知識。

爲了應對,簡單地說,一些細節:

  • @class指令被用來聲明一個類的名稱,而無需將其導入的頭文件。它通常用於聲明協議的.h文件中,因爲協議沒有實現,所以不需要導入其他類(它們的.h文件)的接口。
  • 協議是一種聲明類實現協議的方法和屬性的方法。
  • @interface用於接口文件(。h)聲明一個類,意思是描述它將要使用的方法和屬性,它將要實現的協議以及它將繼承的超類。在你的例子中,這個類將被稱爲flipAppDelegate,它繼承了NSObject類的所有方法和屬性,並實現UIApplicationDelegate協議。
  • 在您的類(.m)文件中,您將定義(包含所有代碼)在接口文件中聲明的所有方法和屬性。你包括你自己聲明的方法和屬性,以及你實現的協議。
  • @synthesize用於類實現文件(.m)中「合成」 - 即自動創建代碼---在接口(.h)文件中聲明的所有屬性。由於屬性通常只需要基本訪問器(一個「getter」只返回當前值,而一個「setter」只設置當前值),因此使用@synthesize是讓編譯器創建變量來存儲值的快捷方式, getter方法和自動設置方法。