A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .Drenched   /  2014-5-2 16:34  /  2548 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1>重写-init方法:
在@interface声明

@property NSString *name;

在@implementation实现如下:
  1. - (id)init
  2. {
  3.     if ( self = [super init] )
  4.     {
  5.         _name = @"Jack";
  6.     }
  7.     return self;
  8. }
复制代码
2>自定义构造方法

在@interface声明

- (id)initWithName:(NSString *)name;

在@implementation实现如下:


  1. - (id)initWithName:(NSString *)name
  2. {

  3.     if ( self = [super init] )
  4.     {
  5.         _name = name;
  6.     }
  7.    
  8.     return self;
  9. }
复制代码

我的问题是:自定义构造方法有什么用?

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

21 个回复

倒序浏览
执着的土豆 发表于 2014-5-2 17:13
默认的构造方法,也就是init方法,它是不接收任何参数的。因此,在实际开发中,为了方便,会经常自定义构造 ...

默认的构造方法不是new?new分为分配存储空间和初始化init,只要修改默认初始化值就可以了。
比方说如下定义,将age的初始值修改成了10。
  1. - (id)init
  2. {
  3.     if ( self = [super init] )
  4.     {
  5.         _age = 10;
  6.     }

  7.     return self;
  8. }
复制代码

照这样,那我自定义构造方法的用途是什么?

回复 使用道具 举报
如果“用来在给对象初始化的时候实现设置默认参数。”我重构init就行了,何必要自定义构造方法呢?
回复 使用道具 举报
yaozeyang_2014 发表于 2014-5-2 17:26
其实构造方法的目的就是为了给成员函数初始化的。假如你在@interface里面声明了一些成员变量,因为在@inter ...

我问的是自定义构造方法与重写-init方法的区别。自定义构造方法与重写-init方法都可以给成员变量定义初始值。
回复 使用道具 举报
执着的土豆 发表于 2014-5-2 17:28
你这样自定义初始化的用途就是让创建出来的student对象的年龄默认等于10 啊。    如果需要他等于10,那么 ...

额,我知道这样就给成员变量age初始化值为10,因为我重写了init方法,我的意思,我现在也可以自定义构造方法来实现给成员变量age初始值为10.这两者的区别在哪里,既然我重写init就行了,那我何必要自定义构造方法呢?
回复 使用道具 举报
执着的土豆 发表于 2014-5-2 17:31
我的理解是,自定义构造方法其实就是重构init方法。

不是的,这两者肯定有区别,区别在于一个是写死的,一个是可以接收参数的,因为init重构也是写死的,但是怎么接收,我不知道,问题在这里。
回复 使用道具 举报
yaozeyang_2014 发表于 2014-5-2 17:34
自定义构造方法,直接让对象调用你自定义的方法就好,是可以初始化的啊,如果你重写方法的话,也是可以的 ...

怎么“直接让对象调用你自定义的方法”?比如?
回复 使用道具 举报
执着的土豆 发表于 2014-5-2 17:42
我在1楼给你回复的时候,想着要不要直接写死 _age=10;   那样写虽然也可以实现,并且在主函数调用的时候不 ...

就算你自定义重构方法,也要一个一个的写阿,你的成员变量有几个就要写几个重构方法,先声明后实现。而不是你说的几个参数可以写在一个重构方法里面。
回复 使用道具 举报
执着的土豆 发表于 2014-5-2 17:46
-  (id)initWithAge: (int)age
{
    if(self=[super init])

重写init不一样么?好像也是一样的。
回复 使用道具 举报
执着的土豆 发表于 2014-5-2 17:55
其实在我的理解来看,重写就是最简单的自定义构造方法。     几个参数当然可以写在一个重构方法里啊。 只 ...

重写就是最简单的自定义构造方法。这句话好像像那么一回事。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马