Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么不能释放该对象?_Ios_Objective C - Fatal编程技术网

Ios 为什么不能释放该对象?

Ios 为什么不能释放该对象?,ios,objective-c,Ios,Objective C,我有一个问题 1.看演示,redView是一个本地变量,只是有点“UIView”,当我弹出secondVC时,但是secondVC和redView不能发布。为什么? @interface RedView : UIView @property(nonatomic,copy) void (^redViewBlock)(); @end @interface SecondVC () @property(nonatomic,strong)GreenView *greenView; @end @imp

我有一个问题

1.看演示,redView是一个本地变量,只是有点“UIView”,当我弹出secondVC时,但是secondVC和redView不能发布。为什么?

@interface RedView : UIView
@property(nonatomic,copy) void (^redViewBlock)();
@end
@interface SecondVC ()

@property(nonatomic,strong)GreenView *greenView;
@end

@implementation SecondVC

- (void)viewDidLoad {
  [super viewDidLoad];
  self.view.backgroundColor = [UIColor whiteColor];
  self.greenView = [[GreenView alloc]initWithFrame:CGRectMake(200, 200, 200, 200)];
  [self.view addSubview:self.greenView];
}

2.我在secondVC和redView之间添加了一个greenView,greenView是一个全局变量,当我弹出secondVC时,greenView和redView不能释放,但是secondVC可以释放。为什么?

@interface RedView : UIView
@property(nonatomic,copy) void (^redViewBlock)();
@end
@interface SecondVC ()

@property(nonatomic,strong)GreenView *greenView;
@end

@implementation SecondVC

- (void)viewDidLoad {
  [super viewDidLoad];
  self.view.backgroundColor = [UIColor whiteColor];
  self.greenView = [[GreenView alloc]initWithFrame:CGRectMake(200, 200, 200, 200)];
  [self.view addSubview:self.greenView];
}


因为redView引用了SecondVC,SecondVC引用了redView。你应该做自己的弱点:

__weak typeof(self) weakSelf = self;
RedView *redView = [[RedView alloc]initWithFrame:CGRectMake(40, 40, 40, 40)];
 [redView setRedViewBlock:^{
    [weakSelf aSecondViewFunc];
 }];
[self.view addSubview:redView];

但redView是一个局部变量,如果redView未添加到SecondVC,则可以将其释放。所以SecondVC引用redView是因为redView是Second的子视图?我认为它是“局部变量”并不重要。它作为self.view(self是您的第二个VC)的子视图存在于内存中,因此在退出这段代码后不会被释放。