黑马程序员技术交流社区

标题: oc加强 [打印本页]

作者: 庞佳星    时间: 2015-8-23 20:22
标题: oc加强
6、 设计3个类,人、书、学生,类之间的关系(必须用到继承、组合)(Objective-C)
1> 人
(1)属性
* 姓名
* 年龄
2> 书
(1)属性
* 书名
* 出版社名称
* 作者(包含姓名和年龄)
3> 学生
* 姓名
* 年龄
* 学号
* 书(随身带着一本书)

MRC方式   
1  人
   1)人类方法的申明:
    Person.h文件
        #import<Foundation/Foundation.h>
        @interface Person:NSObject
        @proprety(nonatomic,retain)NSString *name;//姓名
        @proprety (nonatomic,assgin)int age;//年龄
        @end
    2人类方法的实现
    Person.m文件
        #import"Person.h"
        @implementation Person
        //销毁,实现手动管理
        -(void)dealloc
        {
                [_name release];
                NSLog(@"Person dealloc");
                [super dealloc];
        }       
        @end
2书
    1书类方法的申明
        #import<Foundation/Foundation.h>
        @class Person
        @interface Book:NSObject
        @proprety(nonatomic,retain)NSString *title;//书名
        @proprety(nonatomic,retain)NSString *pressName;//出版社名称
        @proprety(nonatomic,retain)Person *author;//作者
        @end
    2书类方法的实现       
        #import"Book.h"
        #import"Person.h"
        @implementation Book
        -(void)dealloc
        {
                [_title release];
                [_pressName release];
                [_author release];
                NSLog(@"Book dealloc");
                [super dealloc];
        }       
        @end
3学生     继承人类   
    1学生类方法的声明
        Student.h文件
        #import"Person.h"
        @class Book.h
        @interface Student:Person
        @proprety (nonatomic,assgin) int sno;
        @proprety (nonatomic,retain) Book *book;//人拥有一本书                       
        @end
    2学生类方法的实现
        Student.m文件
        #import"Student.h"
        #import"Book.h"
        @implementation Student       
        -(void)dealloc
        {
                [_book release];
                NSLog(@"Student dealloc");
                [super dealloc];
        }
        @end
4 main函数
int main(int argc,const char *argv[]){
        @autoreleasepool{
                Person *p=[Person new];                //p.retainCount=1
                Book *b=[Book new];                //b.retainCount=1
                Student *s=[Student new];        //s.retainCount=1
                b.author=p;                        //p.retainCount=2
                s.book=b;                        //b.retainCount=2
                [b release];                        //b.retainCount=1,p.retainCount=1
                [s release];                        //b.retainCount=0,s.retainCount=0
                [p release];                        //p.retainCount=0
        }
        return 0;
}

ARC方式   
1  人
   1)人类方法的申明:
    Person.h文件
        #import<Foundation/Foundation.h>
        @interface Person:NSObject
        @proprety(nonatomic,strong)NSString *name;//姓名
        @proprety (nonatomic,assgin)int age;//年龄
        @end
    2人类方法的实现
    Person.m文件
        #import"Person.h"
        @implementation Person
        //销毁,实现手动管理
        -(void)dealloc
        {
                NSLog(@"Person dealloc");
        }       
        @end
2书
    1书类方法的申明
        #import<Foundation/Foundation.h>
        @class Person
        @interface Book:NSObject
        @proprety(nonatomic,strong)NSString *title;//书名
        @proprety(nonatomic,strong)NSString *pressName;//出版社名称
        @proprety(nonatomic,strong)Person *author;//作者
        @end
    2书类方法的实现       
        #import"Book.h"
        #import"Person.h"
        @implementation Book
        -(void)dealloc
        {
                NSLog(@"Book dealloc");
        }       
        @end
3学生     继承人类   
    1学生类方法的声明
        Student.h文件
        #import"Person.h"
        @class Book.h
        @interface Student:Person
        @proprety (nonatomic,assgin) int sno;
        @proprety (nonatomic,strong) Book *book;//人拥有一本书                       
        @end
    2学生类方法的实现
        Student.m文件
        #import"Student.h"
        #import"Book.h"
        @implementation Student       
        -(void)dealloc
        {
                NSLog(@"Student dealloc");
        }
        @end
4 main函数
int main(int argc,const char *argv[]){
        @autoreleasepool{
                Person *p=[Person new];               
                Book *b=[Book new];               
                Student *s=[Student new];       
                b.author=p;                       
                s.book=b;                               
        }
        return 0;
}
作者: 庞佳星    时间: 2015-8-23 20:25
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
作者: MEIMEIAA    时间: 2015-8-23 21:02
过来看看,正要学到这边
作者: lzfree    时间: 2015-8-23 21:57
来学习了!
作者: 魏武    时间: 2015-8-23 22:21
MRC中释放的时候可以使用autorelease释放池
作者: 企业部-阿狗老师    时间: 2015-8-23 23:34

来学习了!
作者: 庞佳星    时间: 2015-8-24 07:39
MEIMEIAA 发表于 2015-8-23 21:02
过来看看,正要学到这边

加油,一起进入下一期!!!
作者: 庞佳星    时间: 2015-8-24 07:40
魏武 发表于 2015-8-23 22:21
MRC中释放的时候可以使用autorelease释放池

恩恩,直接用对象加上,autorelease就行了!!!
作者: 庞佳星    时间: 2015-8-24 07:42
昆哥的狗 发表于 2015-8-23 23:34
来学习了!

加油加油!!!!!!!
作者: runsunlife    时间: 2015-8-24 08:04
来看看学习学习
作者: to_love    时间: 2015-8-24 08:08
这就是OC呀!感觉字数好多。
作者: smilejoke    时间: 2015-8-24 09:43
先收藏,以后看
作者: 同舟ing    时间: 2015-8-24 09:44
没事看看,还是受益颇多的




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