Ios 是否保留一个包含指向[UID]指针的ivar?

Ios 是否保留一个包含指向[UID]指针的ivar?,ios,singleton,uiaccelerometer,Ios,Singleton,Uiaccelerometer,我正在使用手动引用计数和Xcode 4.5 我宣布了ivar: ui加速度计*加速度计 加速计不是一种财产。我用一种方法编写了这个代码: accelerometer = [UIAccelerometer sharedAccelerometer]; accelerometer.delegate = self; 第二种方法是: accelerometer.delegate = nil; 在后来运行的另一种方法中,我有: accelerometer.delegate = self; 通过此设置,

我正在使用手动引用计数和Xcode 4.5

我宣布了ivar:

ui加速度计*加速度计

加速计不是一种财产。我用一种方法编写了这个代码:

accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
第二种方法是:

accelerometer.delegate = nil;
在后来运行的另一种方法中,我有:

accelerometer.delegate = self;
通过此设置,我偶尔(很少且似乎随机)会遇到以下中止:

“NSInvalidArgumentException”,原因:”-[NSPathStore2 setDelegate:: 已将无法识别的选择器发送到实例xxx

在经历了很多挫折之后,我寻找了这次中止的原因,我尝试在加速计第一次被使用的时候,在加速计上放置一个retain,之后就没有中止了。但我担心的是,保留并没有解决真正的问题。考虑此“解决方案”的原因是,中止消息抱怨调用setDelegate,在似乎相关的代码部分中,我设置的唯一委托是在加速计上。但我不明白为什么这应该解决它,我担心retain只是以一种恰好隐藏问题的方式来转移代码

我的理解是

accelerometer = [UIAccelerometer sharedAccelerometer];
创建一个单例实例,该实例在其所在实例的持续时间内具有相同的地址,并且该地址被分配给加速计,加速计在该实例的持续时间内也存在。如果是这样,为什么保留会改变什么

SharedAclerometer单例能否在其所在的实例解除分配之前解除分配?

如果加速计是ivar,则保留放置在其中的任何对象都是正确的。。。所以这个代码

accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
应该是

accelerometer = [ [ UIAccelerometer sharedAccelerometer ] retain ] ;
accelerometer.delegate = self;
并在
-dealloc
中添加

[ accelerometer release ] ;
accelerometer = nil ;

很抱歉,但是反推今天似乎不起作用。我已经编辑了3次,以更改背景,但无法使其看起来正确。我所有的背景都在不同的线条上,但有时它们出现在这里而没有换行符。你考虑过切换到ARC吗?手动引用计数很乏味,而且容易出错。是的,我有,但现在不是时候。这个游戏已经有10000行代码,其中大部分写了不止一次,加上170个png文件,我迫于压力尽快把它发布出来。它现在看起来很坚固,所以我不愿意做不必要的改变。如果它有很多用户,我将转换为ARC进行更新。对于这样一个大型项目,转换为ARC可能会很痛苦。。。我这么说是因为我觉得我看到了很多问题,人们在哪里开始新的项目,没有ARC。顺便说一句,修正了你的格式。Backtick是用来内联引用代码的。。对于代码块,每行以4个空格开头。