黑马程序员_关于循环引用
2014-04-24 21:41
411 查看
------- IOS培训、<a href="http://www.itheima.com" target="blank”>Mac、期待与您交流! —————
案例:
--Person.h--
#import <Foundation/Foundation.h>
#import "Card.h"
// @class仅仅是告诉编译器,Card是一个类
//@class Card;
@interface Person :
NSObject
@property (nonatomic,
retain) Card *card;
@end
--Person.m--
#import "Person.h"
#import "Card.h"
@implementation Person
- (void)dealloc
{
NSLog(@"Person被销毁了");
[_card
release];
[super
dealloc];
}
@end
--Student.h--
#import "Person.h"
@interface Student :
Person
@property int no;
- (id)initWithNo:(int)no;
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no;
@end
--Student.m--
@implementation Student
- (id)initWithNo:(int)no
{
if ( self = [super
init] )
{
_no = no;
}
return
self;
}
// 父类的属性交给父类方法去处理,子类方法处理子类自己的属性
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
//
将name、age传递到父类方法中进行初始化
if ( self = [super
initWithName:name
andAge:age])
{
_no = no;
}
return
self;
}
@end
--Main.m--
1.@class的作用:仅仅告诉编译器,某个名称是一个类
@class Person; // 仅仅告诉编译器,Person是一个类
2.开发中引用一个类的规范
1> 在.h文件中用@class来声明类
2> 在.m文件中用#import来包含类的所有东西
3.两端循环引用解决方案
1> 一端用retain
2> 一端用assign
#import <Foundation/Foundation.h>
#import "Card.h"
#import "Person.h"
int main()
{
// p - 1
Person *p = [[Person
alloc] init];
// c - 1
Card *c = [[Card
alloc] init];
// c - 2
p.card = c;
// p - 1
c.person = p;
// c - 1
[c
release];
// p - 0 c - 0
[p
release];
return 0;
}
案例:
--Person.h--
#import <Foundation/Foundation.h>
#import "Card.h"
// @class仅仅是告诉编译器,Card是一个类
//@class Card;
@interface Person :
NSObject
@property (nonatomic,
retain) Card *card;
@end
--Person.m--
#import "Person.h"
#import "Card.h"
@implementation Person
- (void)dealloc
{
NSLog(@"Person被销毁了");
[_card
release];
[super
dealloc];
}
@end
--Student.h--
#import "Person.h"
@interface Student :
Person
@property int no;
- (id)initWithNo:(int)no;
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no;
@end
--Student.m--
@implementation Student
- (id)initWithNo:(int)no
{
if ( self = [super
init] )
{
_no = no;
}
return
self;
}
// 父类的属性交给父类方法去处理,子类方法处理子类自己的属性
- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
//
将name、age传递到父类方法中进行初始化
if ( self = [super
initWithName:name
andAge:age])
{
_no = no;
}
return
self;
}
@end
--Main.m--
1.@class的作用:仅仅告诉编译器,某个名称是一个类
@class Person; // 仅仅告诉编译器,Person是一个类
2.开发中引用一个类的规范
1> 在.h文件中用@class来声明类
2> 在.m文件中用#import来包含类的所有东西
3.两端循环引用解决方案
1> 一端用retain
2> 一端用assign
#import <Foundation/Foundation.h>
#import "Card.h"
#import "Person.h"
int main()
{
// p - 1
Person *p = [[Person
alloc] init];
// c - 1
Card *c = [[Card
alloc] init];
// c - 2
p.card = c;
// p - 1
c.person = p;
// c - 1
[c
release];
// p - 0 c - 0
[p
release];
return 0;
}
相关文章推荐
- 关于循环引用的特例
- 黑马程序员---06@property内存管理中如何避免循环引用的问题
- 关于For循环中定义的变量在循环外的引用
- JVM(3)对象A和B循环引用,最后会不会不被GC回收?-------关于Java的GC机制
- IE内存泄漏补充:关于循环引用的详细解释
- 关于Block的copy和循环引用的问题
- Ios 关于Block循环引用的面试题
- 黑马程序员——OC基础---内存管理(引用计数器,多对象内存管理,set方法的内存管理,模型设计,循环引用)
- 关于for循环中引用setTimeout
- 关于Block的copy和循环引用的问题
- 关于std::shared_ptr与std::enable_shared_from_this循环引用导致的问题
- 关于Block的copy和循环引用的问题
- iOS 关于Block的使用及循环引用
- 关于Block循环引用的问题
- 关于EDM模型中多个实体之间循环引用导致保存数据失败的解决方案一例
- 关于EF的 序列化类型为“XXX”的对象时检测到循环引用。
- 关于Block的copy和循环引用的问题
- 关于java中对象的循环引用问题
- iOS - 关于NSTimer的循环引用
- 关于block 循环引用 weakSelf