And*_*nko 0 memory-management objective-c ios
我有以下课程:
@implementation MyUICollectionViewCell {
CAShapeLayer *layr;
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.layer.mask = [CAShapeLayer layer];
layr = [CAShapeLayer layer];
}
return self;
}
- (void)initMask {
self.layer.mask = [CAShapeLayer layer];
}
- (void)updateMask {
CAShapeLayer *maskLayer = (CAShapeLayer*) self.layer.mask;
maskLayer.frame = ...;
maskLayer.path = ...;
}
@end
Run Code Online (Sandbox Code Playgroud)
如果我self.layer.mask
在构造函数中赋值,则它nil
在updateMask
方法中.但是,如果赋值是在initMask
方法中完成的(从类外部调用),一切正常.
谁能解释一下这里发生了什么?
编辑:
尝试将对象存储在ivar(即layr
)中,但无济于事 - 它仍然nil
存在updateMask
.
我认为在调用initWithFrame时尚未启动图层内容.这将导致覆盖您稍后在初始化期间设置的图层信息.
我前段时间使用的是layoutSubViews的覆盖.在您的情况下,这将类似于以下内容:
-(void)layoutSubViews
{
[super layoutSubviews]; // Added due to remark below
self.layer.mask = [CAShapeLayer layer];
}
Run Code Online (Sandbox Code Playgroud)
我希望这会给你一个替代方案.
归档时间: |
|
查看次数: |
106 次 |
最近记录: |