今天我們開始學習objective-c面向對象的第二個基礎部分,類的一些基本操作,上篇中演示的程序,主函數以及調用的類接口以及實現部分都在同一個文件中,假如類多了之後這絕對不是一個好的解決辦法,這篇我們就來說說如何分離:
我建瞭如圖一個文件,當前顯示的編輯窗口是主函數窗口,現在我們去建專門放類的文件,點擊菜單欄的file,進去點new,選擇file就進入下面這個界面:
選擇objective-c class文件,然後next進入下面這個界面
在這個界面填入類名以及父類名,默認NSObject類,因爲這是祖宗類,然後next,就進入把新創建的文件放在哪個文件夾下,在group中選擇即可,然後文件夾目錄就自動多了兩個文件
我們看到生成一個後綴爲.h一個爲.m的文件,分別打開,我們就會看到接口部分放在.h文件中,實現部分放在.m文件裏,這樣就分離類成功了,後面的例子中我們會用到。
如果有過java開發的就應該用到過eclipse吧,多麼強大的一個開發工具啊,還記得裏面的getset方法可以自動生成嗎?那是多麼方便啊,xcode其實也很強大,我們也可以合成getset的方法,下面我就一步步講一下:
例如,我們要爲test類添加a屬性和b屬性,a屬性的getset方法自動生成,b還用原來的方法,然後大家可以看到效果:
interface部分:
#import <Foundation/Foundation.h>
@interface Test : NSObject
@property int a;
@end
implemention部分
#import "Test.h"
@implementation Test
{
int b;
}
@synthesize a;
@end
main部分
#import <Foundation/Foundation.h>
#import "Test.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Test *test = [[Test alloc] init];
[test setA:5];
NSLog(@"%i",[test a]);
[test setB:4];
}
return 0;
}
看到結果如圖:
總結一下,
(1)要在其他地方調用一個類需要import進去,所以main前面有這麼一句#import "Test.h",引入自己的類是雙引號,引入系統的類是<>
(2)a可以自動合成getset方法步驟1在interface部分:@property int a;2在implemention部分@synthesize a;,然後我們在主函數裏面調用getset方法時,相應的方法就會自動提示出來了,b還是原來的方法,我強制使用setB就報了上面的錯
會了getset方法自動合成,我們就開始學習多參數方法,前面用的方法要麼是沒有參數的,要麼是隻有一個參數,這次我們寫個方法實現一次爲a和b都賦值
在interface中
#import <Foundation/Foundation.h>
@interface Test : NSObject
@property int a;
-(void) setTo:(int) a over:(int) b;
-(void) setB:(int) x;
-(int) b;
@end
implementin部分
#import "Test.h"
@implementation Test
{
int b;
}
@synthesize a;
-(void) setB:(int)x{
b = x;
}
-(int) b{
return b;
}
-(void) setTo:(int)x over:(int)z{
a = x;
b = z;
}
@end
main部分
#import <Foundation/Foundation.h>
#import "Test.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Test *test = [[Test alloc] init];
[test setTo:3 over:4];
NSLog(@"%i and %i",[test a],[test b]);
}
return 0;
}
這種大家一看就清楚了吧
上午本來計劃寫來,把未完成都去掉了,有點事耽擱了,對不住大家了,
我來說說局部變量,局部變量是c語言的基本數據類型,所以使用之前必須得賦值,這個我就不細說了,有編程經驗到人都會用
我在這主要說的是static的使用,大家一定會疑惑static和局部變量有什麼關係,因爲java中的static都是成員變量,這就是objective-c的不同,objective-c中static可以定義在單個方法中也可以定義在全局中,用途是不同的,定義在方法中是記錄該方法執行的次數,定義在全局中是記錄該類執行的次數,下面用代碼解釋一下。
定義在方法中:
看到了把,我們調用a方法三次,count值自動增加
下面我們看看定義全局static
以上就是全局static的使用方法
其實objective-c也提供了java中this的使用方法只不過不叫this,叫self,寫過php面向對象的人就知道這,因爲php中也是self,用法和javathis一樣在,在此不再詳述