zoukankan      html  css  js  c++  java
  • oc实例变量初始化方法

    1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx

    2 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx
    3 使用实例初始化方法 initWith开头的方法
    4 使用构造器 类名+With…
    以Person  Student两个类为例
    1 使用实例 setter方法
    这是最麻烦的方法
    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类的方法,这样能保证多个入口一个出口,避免混乱。
  • 相关阅读:
    阿里云云效技术专家分享:云原生开发、调测及可靠发布解决方案
    对话李飞飞,揭秘国际体育赛事风“云”背后的黑科技
    时序数据库永远的难关 — 时间线膨胀(高基数 Cardinality)问题的解决方案
    当Java遇上机密计算,又一段奇幻之旅开始了!
    内核热补丁,真的安全么?
    在 Dubbo3.0 上服务治理的实践
    CCF-201509-3-生成模板系统
    WPF CommandParameter的使用
    UWP App Data存储和获取
    在WPF中的ItemsControl中使用事件和命令(Using events and Commands within ItemsControl in WPF)
  • 原文地址:https://www.cnblogs.com/uncle4/p/5336499.html
Copyright © 2011-2022 走看看