创建完类之后:
成员变量:
假设在Person类中包含人员姓名(name)、年龄(age)
其中姓名是保护的,年龄是公开的。
@interface test : NSObject{
NSString * name;
@public
unsigned int age;
}
NSObject是基类,test实现了NSObject
注意成员变量不声明任何关键字的话是默认可访问性@Protected
成员的可访问性通过下面三个关键字声明:
@private 私有成员,只有当前类可以访问;
@protected 受保护成员,只有当前类或子类可以访问(如果没有添加任何修饰则默认为@protected);
@public 公共成员,所有类均可访问;
在ObjC中可访问性修饰符除了这三种,还有一个@package不太常用,它类似于C#中的internal在框架内是公共的,但是框架外是私有的(也就是只能在一个框架内可以访问)
注意几点:
ObjC中所有的对象类型的变量都必须加上“”,在ObjC中对象其实就是一个指针(例如之前看到的NSString也是如此,但是基本类型不用加””);
ObjC中使用[]进行方法调用,在ObjC中方法调用的本质就是给这个对象或类发送一个消息;
在ObjC中类的实例化需要两个步骤:分配内存、初始化;
类的初始化调用了父类的init方法,如果使用默认初始化方法进行初始化(没有参数),内存分配和初始化可以简写成[Person new];
公共成员的调用使用“->”操作符;
方法:
在ObjC中方法分为静态方法和动态方法两种,动态方法就是对象的方法,静态方法就是类方法,这一点跟其他高级语言没有区别。在ObjC中使用“-”定义动态方法,使用“+”定义静态方法。如果一个方法在.h中有声明则该方法是公共方法,如果没有在.h中声明直接在.m中定义则该方法是私有方法,外部无法访问。
-(void)setName:(NSString *)aName;
-(NSString *)name;
即test.h完整代码如下
#import <Foundation/Foundation.h>
@interface test : NSObject{
NSString * name;
@public
unsigned int age;
}
-(void)setName:(NSString *)aName;
-(NSString *)name;
@end
创建类生成的另一个文件 test.m
#import "test.h"
@implementation test
-(void)setName:(NSString *)aName{
name=aName;
}
-(NSString *)name{
return name;
}
@end
在Objective-C中方法的参数类型、返回值类型需要放到()中,而且参数前必须使用冒号,并且此时冒号是方法名的一部分。
接下来是 主文件 main.m
#import <Foundation/Foundation.h>
#import "test.h"
int main(int argc,const char * argv[])
{
@autoreleasepool {
test * abc=[[test alloc]init];
abc->age=20;
[abc setName:@"Haha"];
NSLog(@"姓名:%@",[abc name]);
NSLog(@"年龄:age=%d",abc->age);
}
}
其中test * abc=[[test alloc]init];
还可以写成
test *abc=[test alloc];
abc=[abc init];
或
test *abc=[test new];