黑马程序员技术交流社区

标题: 关于init初始化问题 [打印本页]

作者: 桑托尔    时间: 2014-4-28 15:36
标题: 关于init初始化问题
本帖最后由 桑托尔 于 2014-4-30 09:39 编辑

关于init初始化问题,如果想在学生这个类里面重写init,让每个新建出来的学生类初始化的age都是10,可以有如下代码
  1. //在学生类的.m文件中
  2. -(id)init
  3. {
  4.       if ( self = [super init] )
  5.       {
  6.             _age = 10;
  7.       }
  8.       return self;
  9. }
复制代码

那么如果我想初始化学号 _no呢,同时希望每调用一次init,都会令学号 +=1,应该怎么做到不想用initWithNo这种,就是想在init运行中,每次自动加1赋值给新的no成员变量

作者: 一只小菜鸟    时间: 2014-4-28 15:59
  1. -(id)init
  2. {
  3.     static int age = 0;  //对象销毁时,值不会改变。
  4.     if ( self = [super init] )
  5.     {
  6.         age++;
  7.         _age = age;
  8.     }
  9.     return self;
  10. }
复制代码

  1. int main(int argc, const char * argv[])
  2. {
  3.     Student *stu1 = [[Student alloc] init];
  4.     Student *stu2 = [[Student alloc] init];
  5.     Student *stu3 = [[Student alloc] init];
  6.     NSLog(@"age %i", stu1.no); //age 1
  7.     NSLog(@"age %i", stu3.no); //age 3   初始化一次 年龄增加一次
  8.     return 0;
  9. }
复制代码

作者: 脸皮猴    时间: 2014-4-28 16:02
  1. -(id)init
  2. {
  3.     static int number = 0;
  4.     if ( self = [super init] )
  5.     {
  6.         _age = 10;
  7.         _number = ++number;
  8.     }
  9.     return self;
  10. }
复制代码

希望有更好的方法能实现,我是用一个静态变量来实现的。
作者: sabjiang    时间: 2014-4-28 16:38
每次实例化对象,都重新赋值的成员,基本上就是静态成员了吧,就像上面两位兄弟写的一样。或者可以试试判断当前Student对象的个数,根据已存在的对象个数来给no成员赋值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2