·您现在的位置: 江北区云翼计算机软件开发服务部 >> 文章中心 >> 网站建设 >> 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