Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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,该私有财产声明为: @interface Camera () { SE3 *_transformationFromWorld; } @end 在初始化摄影机对象时指定: self = [super init]; SE3 *transformation = [[SE3 alloc] initWithRotation:R withTranslation:T]; _transformationFromWorld = transformation; [self initIntrinsics];

该私有财产声明为:

@interface Camera ()
{
    SE3 *_transformationFromWorld;
}
@end
在初始化摄影机对象时指定:

self = [super init];
SE3 *transformation = [[SE3 alloc] initWithRotation:R withTranslation:T];
_transformationFromWorld = transformation;
[self initIntrinsics];

return self;
但在调试器窗口中,我可以看到它保持为零,而转换对象是正常分配的。我扩展了代码以检查它不是返回nil的SE3初始化方法

这怎么可能

解决方案:

来自@Shahar的评论为我指明了正确的方向。当我在.m文件中声明这样的属性时:

@interface Camera ()
@property SE3 *transformationFromWorld;
@end

它神奇地工作了。有人想解释一下这种声明属性的方式与前一种方式的区别吗?

方法完成后,对象将被删除。如果需要,您需要在构造函数中处理全局变量。_transformationFromWorld指针不应该让它保持活动状态吗?如果我直接分配给私有变量,私有变量将保持为零。但是,对于局部var转换,这并没有发生。我不确定,但从您的实验来看,它似乎不是这样的。除了自动创建解决方案设置器和获取器之外,没有其他区别。我怀疑你在调试器上测试错误的东西。创建一个在类中测试var的方法。然后初始化对象,并调用方法进行测试。在使用实例变量之前,请尝试在nil上检查self