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类的方法,这样能保证多个入口一个出口,避免混乱。
  • 相关阅读:
    SpringCloud教程第10篇:高可用的服务注册中心(F版本)
    SpringCloud教程第9篇:Sleuth(F版本)
    requests.session保持会话
    Jmeter Constant Throughput Timer 使用
    Jmeter提取响应数据的结果保存到本地的一个文件
    练习2
    练习1
    一道简单的练习题
    Maven下org.junit.Test无法使用
    [转]解决pycharm无法导入本地包的问题(Unresolved reference 'tutorial')
  • 原文地址:https://www.cnblogs.com/uncle4/p/5336499.html
Copyright © 2011-2022 走看看