[Object-C]OC实例变量初始化方法

OC实例变量初始化方法
1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx
2 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx
3 使用实例初始化方法 initWith开头的方法
4 使用构造器 类名+With…
以Person  Student两个类为例
1 使用实例 setter方法
这是最麻烦的方法
[html]  view plain copy
  1. @interface Person : NSObject  
  2. {  
  3.     NSString *_name;  
  4.     NSString *_sex;  
  5.     int _age;  
  6. }  
  7.   
  8.   
  9. //setter方法  
  10. -(void)setName:(NSString *)name;  
  11. -(void)setSex:(NSString *)sex;  
  12. -(void)setAge:(int)age;  
  13. @end  
  14.   
  15.   
  16. @implementation Person  
  17. //setter方法  
  18. -(void)setName:(NSString *)name  
  19. {  
  20.     _name = name;  
  21. }  
  22. -(void)setSex:(NSString *)sex  
  23. {  
  24.     _sex = sex;  
  25. }  
  26. -(void)setAge:(int)age  
  27. {  
  28.     _age = age;  
  29. }  
  30.   
  31.   
  32. @end  
  33.   
  34.   
  35. @interface Student : Person  
  36. {  
  37.     NSString *_studentID;  
  38.     float _score;  
  39. }  
  40. //setter  
  41. -(void)setStudentID:(NSString *)studentID;  
  42. -(void)setScore:(float)score;  
  43.   
  44.   
  45. @end  
  46.   
  47.   
  48. @implementation Student : Person  
  49.   
  50.   
  51. //setter  
  52. -(void)setStudentID:(NSString *)studentID  
  53. {  
  54.     _studentID = studentID;  
  55. }  
  56. -(void)setScore:(float)score  
  57. {  
  58.     _score = score;  
  59. }  
  60. @end  
  61.   
  62.   
  63. int main()  
  64. {  
  65.     Student *stu = [[Student alloc]init];//开辟空间调用初始化方法  
  66.     //使用setter方法为实例变量赋值。  
  67.     [stu setName:@"xiaoA"];  
  68.     [stu setSex:@"Man"];  
  69.     [stu setAge:15];  
  70.     [stu setStudentID:@"2008-07"];  
  71.     [stu setScore:96];  
  72.   
  73.   
  74.     return 0;  
  75. }  



2 使用实例功能类方法赋值
简单于setter方法
[html]  view plain copy
  1. @interface Person : NSObject  
  2. {  
  3.     NSString *_name;  
  4.     NSString *_sex;  
  5.     int _age;  
  6. }  
  7.   
  8.   
  9. -(void)setName:(NSString *)name sex:(NSString *)sex age:(int)age;  
  10.   
  11.   
  12. @end  
  13.   
  14.   
  15. @implementation Person  
  16.   
  17.   
  18. -(void)setName:(NSString *)name sex:(NSString *)sex age:(int)age  
  19. {  
  20.     _name = name;  
  21.     _sex = sex;  
  22.     _age = age;  
  23. }  
  24.   
  25.   
  26. @end  
  27.   
  28.   
  29. @interface Student : Person  
  30. {  
  31.     NSString *_studentID;  
  32.     float _score;  
  33. }  
  34.   
  35.   
  36. -(void)setStudentID:(NSString *)studentID score:(float)score;  
  37. @end  
  38.   
  39.   
  40. @implementation Student : Person  
  41.   
  42.   
  43. -(void)setStudentID:(NSString *)studentID score:(float)score  
  44. {  
  45.     _studentID = studentID;  
  46.     _score = score;  
  47. }  
  48. @end  
  49.   
  50.   
  51. int main()  
  52. {  
  53.     Student *stu = [[Student alloc]init];//开辟空间调用初始化方法  
  54.     //使用setter方法为实例变量赋值。  
  55.     [stu setName:@"xiaoA" sex:@"Man" age:15];  
  56.     [stu setStudentID:@"2008-02" score:97];  
  57.       
  58.     return 0;  
  59. }  




3 使用实例初始化方法 initWith开头的方法
这是一种比较常用的方法
[html]  view plain copy
  1. @interface Person : NSObject  
  2. {  
  3.     NSString *_name;  
  4.     NSString *_sex;  
  5.     int _age;  
  6. }  
  7.   
  8.   
  9. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age;  
  10.   
  11.   
  12. @end  
  13.   
  14.   
  15. @implementation Person  
  16.   
  17.   
  18. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age  
  19. {  
  20.     self = [super init];  
  21.     if(self)  
  22.     {  
  23.     _name = name;  
  24.     _sex = sex;  
  25.     _age = age;  
  26.     }  
  27.     return self;  
  28. }  
  29.   
  30.   
  31. @end  
  32.   
  33.   
  34. @interface Student : Person  
  35. {  
  36.     NSString *_studentID;  
  37.     float _score;  
  38. }  
  39.   
  40.   
  41. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score;  
  42. @end  
  43.   
  44.   
  45. @implementation Student : Person  
  46.   
  47.   
  48. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score  
  49. {  
  50.     self = [super initWithName:name sex:sex age:age];  
  51.     if(self)  
  52.     {  
  53.         _studentID = studentID;  
  54.         _score = score;  
  55.     }  
  56.     return self;  
  57. }  
  58.   
  59.   
  60. @end  
  61.   
  62.   
  63. int main()  
  64. {  
  65.     Student *stu = [[Student alloc]initWithName:@"xiaoA" sex:@"Man" age:15 studentID:@"2008-2" score:97];//开辟空间调用初始化方法  
  66.       
  67.     return 0;  
  68. }  




这种赋值方法有几点需要注意:
1) 自写初始化函数需要 以 initWith开头  必须形如 initWith…注意大小写
2 )一个类里可以有多个初始化方法,但是只能有一个“指定初始化”方法,指定初始化方法是在调用任意一个初始化方法的时候都会默认被调用的初始化方法,也就是说 指定初始化方法是在其它初始化方法里面被调用的,每一个初始化方法内部必须调用指定初始化方法,这不是规则,而是通用的原则。
如 上例做如下修改:
添加一个初始化方法:
h文件声明:
-(void)initWithStudentID:(NSString *)studentID score:(float)score;
m文件实现:
-(void)initWithStudentID:(NSString *)studentID score:(float)score
{
self = [self initWithName:NIL sex:NIL age:NIL studentID:studentID score: score
}
3 )注意继承的初始化的写法
4) self类似与其它语言的this指针,指向当前的对象,如果在方法里面类调用 就指代当前类,对象调用就指代当前对象


4 便利构造器方法
便利构造器书写规则 
类方法  开头以类名开头类名首字母小写 后续驼峰法,属于类方法 用+号


如上例定义便利构造器
+(void)studentWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score
{
Student *stu = [[self alloc]studentWithName:name sex:sex age:age studentID:studentID score:score]; 

}


此时,创建对象的方法就变成了
int main
{
Student *stu = [Student studentWithName:@"xiaoA" sex:@"Man" age:16 studentID:@"2008-02" score:97]


return 0;
}
这种方法创建对象就很便捷了,因为无需每次手动申请空间,调用alloc函数。
一个初始化函数里面只能有一个super init类的方法,这样能保证多个入口一个出口,避免混乱。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值