在xcode 5中,弱指针和强指针的performance略有不同
我有一些代码在xcode 4.6中快乐地工作。 因为我升级到Xcode 5一节没有工作。 这不是错误。 非常奇怪的是,完全相同的代码没有修改在模拟器中工作,但不能在设备上工作。 如果我在xcode 4.6中编译相同的coe,它可以在设备和模拟器上工作。
它使用托尼百万个可达性类。
我已经追查到这个问题,但因为在Xcode 5模拟器itworks,我不明白。
基本上button点击我检查可达性。
我有一个弱指针可达性对象,我设置在button点击 – 片段下面
@interface settingsViewController () @property (weak,nonatomic) Reachability *reachable; @end
….
//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..... }
基本上在不改变模拟器中的任何东西的情况下,debugging控制台打印“创build可达性”,但是在任何设备(iPhone / ipad,IOS6 / IOS7)上,debugging控制台打印“NO OBJECT”
东尼万代码使用reachabilityWithHostname创build对象如下
#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; }
并且在模拟器和设备上,debugging控制台按预期打印“带弧的初始化”。
所以基本上它创build的对象确定,但只要我在模拟器上testing它是有效的,但在设备上它是空的。 那一点我不明白。
但是,如果我改变可达性对象是一个强大的指针,模拟器继续工作,设备工作以及 – 当我testing可达性对象,它被设置和debugging控制台打印“可达性创build”
我不明白如何对象可以为空,只要在弱指针的设备上创build…当然a)模拟器和设备应该行为相同b)我只是刚才创build的对象之前 – 如何如果我使用弱指针,它在设备上变为空?
提前致谢!
你发布的代码不应该工作。
它在模拟器上工作的事实是模拟器不完美的本质,而不是它应该工作的反映。
编译器应该给你一个警告,build立一个对象并把它保存到一个弱指针,它会立即被释放。 这就是ARC的工作原理。
使用本地强variables。 一旦强variables超出范围,则由调用者决定是否应该保留对该对象的强烈参考。
- Twitter API应用程序模式authentication
- UITextView内容偏移量在设置完帧后发生变化
- estimatedHeightForRowAtIndexPath实际上可以改变一行的最终“正确”高度吗?
- UIScrollView里的行selectUITableView问题
- 使用Objective-C在类之间传递数据
- 在iOS 6上保存联系人时出现Phonegap ContactError
- CLLocationManager不能一直工作(iOS 8,Xcode 6)
- Base64使用ISO-8859-1字符集解码string并将其保存到NSData中
- Xcode更新到7.2,但仍然只显示7.1