今天我们开始学习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一样在,在此不再详述