实例对象赋值给数组问题

实例对象赋值给数组问题

for (int i=0; i<5; i++) {
            //            for循环中每次都执行一次创建一个新的MovieTicket的实例对象(共创建5个),然后为其实例变量赋值
            MovieTicket *mvTicket=[MovieTicket new];
            //            电影名称
            mvTicket.name=[NSString stringWithFormat:@"碟中谍 %02d",i+1];
            //            导演
            mvTicket.director=@"王中尧";
            //            主演
            mvTicket.actor=@"马星泽,张桐,郑二安";
            //            影厅信息
            mvTicket.place=[NSString stringWithFormat:@"%02d 厅",i+1];
            //            首映时间
            mvTicket.showTime=[NSString stringWithFormat:@"200%d-12-31",i];
            //            开始时间
            mvTicket.startTime=[NSString stringWithFormat:@"1%d:15",i];
            //            电影编号
            mvTicket.no=i+1;
            //            时长
            mvTicket.lengthTime=120;
            //            票价
            mvTicket.movieTicketPrice=35;
            //            最后把我们初始化完毕的实例对象赋给MovieTicket类型的数组
            tickets[i]=mvTicket;
        }

麻烦问一下,上面这段代码里面,用实例对象的属性给数组赋值,整个循环里面只有一个实例对象mvTicket,在for循环里面,运行没有问题。

但是在下面的代码中,如果不定义一个mvtick2 ,数组ticket[2]中的值就会和ticket[1]中一样,为什么呢?

MovieTicket *mvticket1= [MovieTicket new] ;
        //            电影编号
        mvticket1.no=1;
        //            电影名称
        mvticket1.name=@"《变形金刚5》";
        //            导演
        mvticket1.director=@"迈克尔·贝";
        //            主演
        mvticket1.actor=@"马克·沃尔伯格";
        //            开始时间
        mvticket1.playtime=@"16:00";
        //            时长
        mvticket1.lengthtime=120;
        //            票价
        mvticket1.price=35;
        //把对象存到数组中
        tickets[1] = mvticket1;
        
        MovieTicket *mvticket2= [MovieTicket new] ;
        //            电影编号
        mvticket2.no=2;
        //            电影名称
        mvticket2.name=@"《神偷奶爸3》";
        //            导演
        mvticket2.director=@"凯尔·巴尔达";
        //            主演
        mvticket2.actor=@"史蒂夫·卡瑞尔";
        //            开始时间
        mvticket2.playtime=@"18:00";
        //            时长
        mvticket2.lengthtime=96;
        //            票价
        mvticket2.price=40;
        //把对象存到数组中
        tickets[2] = mvticket2;



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Tender10 2017-07-12 13:39:33

如果是想赋值不同的属性通过for循环其实也不太好,因为每个赋值的结果都不同,除非是命名成变形金刚1,变形金刚2....这样的使用for循环还可以,如果完全不同的就不建议使用for循环了。但是这些属性可以重写一个构造方法,初始化对象的时候就进行相关属性的赋值。

Tender10 2017-07-12 09:31:57

因为第一个其实不是创建一个对象,而是创建了5个对象,因为创建对象的操作是在for循环中,所以for循环每遍历一次,MovieTicket就会创建一个对象。然后对象的属性进行赋值,最后存储在数组中。第二个必须得在写一个创建对象的方法,因为没有了for循环,就得手动去创建5个对象,然后在分别给属性进行赋值,并且在添加到数组中。建议使用第一种方式,有效节约了代码量。

  • 提问者 大眼肚 #1
    第一种方法,每一个循环的内容只能用i进行逻辑推移,想要用for循环创建五个完全不一样的属性,有没有什么办法呢?感谢
    2017-07-12 12:30:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师