
·您现在的位置: 江北区云翼计算机软件开发服务部 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> Objective-C类
Objective-C简称OC,扩充⾃C语⾔的⾯向对象编程语⾔.是OS X和iOS操作系统的主要编程语言。下面是使用OC创建一个类:

类已创建完毕,下面是类的使用:

实例变量的可见度分为public(共有的),PRotected(保护的),private(私有的).
1 @interface Student : NSObject{
2 @public //可在类外使用,可见度高,破坏封装,使用较少.
3 NSString *_name;
4 @protected //默认的,实例变量只能在该类和其⼦类内操作
5 NSString *_gender;
6 @private //只能在类内使用
7 NSInteger _age;
8 }
为了不破坏封装类内一般使用protected(默认的)创建实例变量.为了在类外能使用类里的实例变量,就要在类内设置setter(设置器),getter(访问器)方法.
//Student.h文件
@interface Student : NSObject{
NSString *_name;
NSString *_gender;
}
//设置姓名(声明)
-(void)setName:(NSString *)name;
//设置性别(声明)
-(void)setGender:(NSString *)gender;
//获取姓名(声明)
-(NSString *)name;
//获取性别(声明)
-(NSString *)gender;
@end
//Student.m文件
@implementation Student
//设置姓名(实现)
-(void)setName:(NSString *)name{
_name = name;
}
//设置性别(实现)
-(void)setGender:(NSString *)gender{
_gender = gender;
}
//获取姓名(实现)
-(NSString *)name{
return _name;
}
//获取性别(实现)
-(NSString *)gender{
return _gender;
}
@end
这样定义好设置器和访问器就可以在主函数中使用实例变量了.
//main.m 主函数
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//Student 给alloc发送消息给内存,申请内存
//init student 给init发送消息初始化实例变量
Student *student = [[Student alloc] init];
//通过设置器赋值
[student setName:@"张三"];
//通过访问器获取name的值
NSString *str = [student name];
NSLog(@"%@",str);
}
return 0;
}
OC中属性对getter和setter方法做了默认实现,在一定程度上简化了程序代码,并增强了实例变量访问的安全性.
属性的定义:
1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject 4 @property NSString *name; 5 //相当于@interface中声明了两个方法(setter,getter) 6 //-(void)setName:(NSString *)name; 7 //-(NSString *)name; 8 @end
属性的实现:
1 #import "Student.h"
2
3 @implementation Student
4 @synthesize name = _name;//相当于@implementation实现了(setter,getter)方法
5 //-(void)setName:(NSString *)name{
6 // _name = name;
7 //}
8 //-(NSString *)name{
9 // return _name;
10 //}
11 @end
@synthesize name = _name;可以省略,可以只在头文件里定义@property NSString *name;
OC中为属性提供了⼀一些关键字⽤用以控制setter、getter的实现细节,也就是属性的属性.
属性的属性分为三类:
第⼀类:读写性控制(readonly、readwrite、setter、getter)
1)readwrite读写,默认的.编译器声明setter和getter方法.
2)readonly 只读,编译器只声明getter方法.
3)setter给编译器指定setter方法名.setter方法基本不使用,一般不要修改以其定义的setter方法名.
4)getter方法,给编译器指定getter方法名,getter仅在BOOL类型的属性中使用.
第⼆类:原⼦子性控制(nonatomic、atomic)
1)atonic 原子性,默认的,保证线程安全.占用很多系统资源,降低系统性能,一般用nonatonic.
2)nonatonic,非原子,不保证线程安全.
第三类:语义设置(assign、retain、copy)
1)assign 基本数据类型,默认的.
2)retain 只能给对象类型.
3)copy 只能给遵循<NSCopying>协议的对象类型使用.
使用方式:
1 #import <Foundation/Foundation.h> 2 3 @interface CollegeStudent : NSObject 4 @property (nonatomic,retain) NSString *name; 5 @end