·您现在的位置: 江北区云翼计算机软件开发服务部 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> Objective-C类

Objective-C类

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

Objective-C简称OC,扩充⾃C语⾔的⾯向对象编程语⾔.是OS X和iOS操作系统的主要编程语言。下面是使用OC创建一个类:

   接口部分:Student.h文件

     

实现部分:Student.m文件

 

  

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

主函数:main.m

 

  实例变量的可见度分为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