首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弱指针与强指针在xcode 5中的行为略有不同。

弱指针与强指针在xcode 5中的行为略有不同。
EN

Stack Overflow用户
提问于 2013-10-24 15:25:38
回答 1查看 333关注 0票数 1

我有一些在xcode 4.6中很好地工作的代码。由于我升级到xcode 5,有一个部分无法工作。这不是做错事。非常奇怪的是,完全相同的代码,没有任何修改,在模拟器中工作,但不工作在设备上。如果我在xcode 4.6中编译相同的coe,它确实可以在设备和模拟器上工作。

它使用托尼数百万可达类。

我已经找到了这个问题,但是因为它在xcode 5中的模拟器上工作,我不明白。

基本上,在一个按钮点击,我检查可达性。

我有一个指向可达对象的弱指针,我在下面的单击代码段按钮上设置了该指针。

代码语言:javascript
复制
@interface settingsViewController ()
@property (weak,nonatomic) Reachability *reachable;
@end

……

代码语言:javascript
复制
//called on click
/ Checks if we have an internet connection or not
- (void)testInternetConnection
{
    self.reachable= [Reachability reachabilityWithHostname:@"www.google.com"];
if (self.reachable)
{
    NSLog(@"reachability created");

}
    else
    {
        NSLog(@"NO OBJECT");
    }
//do more stuff.....
}

基本上,在不改变模拟器中的任何内容的情况下,调试控制台会打印“可达性创建”,但是在任何设备(iPhone/ipad、IOS7 6/ on 7)上调试控制台都会打印“无对象”。

使用reachabilityWithHostname创建对象的tony代码如下

代码语言:javascript
复制
#pragma mark - class constructor methods
+(Reachability*)reachabilityWithHostname:(NSString*)hostname
{
    SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]);
    NSLog(@"init1");
    if (ref) 
    {
        NSLog(@"init2");
        id reachability = [[self alloc] initWithReachabilityRef:ref];

#if __has_feature(objc_arc)
        NSLog(@"init with arc");

        return reachability;
#else
        NSLog(@"init no arc");

        return [reachability autorelease];
#endif

    }
    NSLog(@"cannot init");

    return nil;
}

在模拟器和设备上,调试控制台按照预期打印"init“。

基本上,它创建了对象OK,但是当我在模拟器上测试它时,它是有效的,但是在设备上它是空的。这一点我不明白。

但是,如果我将可达对象更改为强指针,模拟器将继续工作,设备也能工作--在测试可达对象时,将设置该对象,并由调试控制台打印“可达性创建”。

我不明白当对象只在一个弱指针的设备上创建时,它怎么会是空的.当然,模拟器和设备应该是相同的( b)我之前只创建了这个对象--如果我使用弱指针,它是如何在设备上变为空的?

提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-24 15:33:36

你发布的代码不应该起作用。

它在模拟器上工作的事实是仿真器不完美的产物,而不是它应该工作的反映。

编译器应该给您一个警告,即创建对象并将其保存到弱指针,它将立即释放。这就是ARC的工作原理。

使用局部变量强变量。强变量一旦超出作用域,将由调用方决定是否保留对对象的强引用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19570085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档