Tag: 弱引用

阻止和保留周期不能赶上它

我有一个块和弱引用的问题,我在ARC下。 我build立了一个类,它是一个免费的项目,是一个围绕Google Directions API的简单包装,你可以在这里下载: link to the project 我在视图控制器内使用它的问题是,使用它后,视图控制器不会被释放。 我想这是这个对象的问题,因为如果我注释掉或设置为零,一切正常。 我无法理解保留周期在哪里,当然我设置为弱自我,这里是我使用它的视图控制器的方法: – (void) getDirections{ __weak RouteMapViewController * weakSelf = self; self.routeObject = [[RouteDirectionsObject alloc]init]; [self.mapView removeAnnotations:self.mapView.annotations]; [self.mapView removeOverlays:self.mapView.overlays]; [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; [_routeObject createDirectionRequestWithStartPoint:weakSelf.startPoint andEndPoint:weakSelf.endPoint withCallBackBlock:^(NSError *error, NSDictionary *routeDistance, NSDictionary *routeDuration, MKPolyline *routePolyline, NSArray *routes, NSArray *steps, CLLocation *startPoint, CLLocation *endPoint, NSArray *directions) { [[UIApplication sharedApplication] […]

何时以及为什么要使用ARC将局部variables声明为__weak?

迈克·阿什把这个介绍写到了ARC ,他介绍了这样一些内容: __weak Foo *_weakFoo = [object foo]; 为什么我要为一个本地临时variables做这个? __weak是一个归零引用,一旦引用的对象被释放,_weakFoo指针就会自动设置为nil。 另外,__weak仅在iOS> = 5中可用。 我什么时候会遇到麻烦? Foo *_weakFoo = [object foo]; 这总是期望返回一个对象或零。 我的猜测是这样的: Foo *_weakFoo = [object foo]; [self doSomethingStupid]; // does something bad so foo gets deallocated [_weakFoo doIt]; // CRASH! msg sent to deallocated instance 0x123456 还有一件事让我感到困惑,那就是:什么时候知道我不再需要一个对象? 我会争辩说,当我设置一个指针为零或其他的东西时,会发现先前引用的对象不再需要这个所有者,因此可能会消失。 但重点是:我把它设置为零。 所以它无论如何是零! 那么,什么时候__弱化一个局部variables是有道理的,那么我必须在别的地方做什么样的疯狂的事情,以至于我真的需要这个?

Objective-C:弱的attritube不能按预期工作

可能重复: 为什么弱的NSString属性不能在iOS中发布? 我是Objective C的新手,我有一些问题,我不能回答自己。 我有一个用于testing__weakvariables的代码块(当然,我正在使用ARC): NSString *myString = [[NSString alloc] initWithFormat:@"John"]; NSString * __weak weakString = myString; myString = nil; //<– release the NSString object NSLog(@"string: %@", weakString); 上面的代码的输出是预期的,因为weakString是一个弱variables: 2013-01-02 11:42:27.481 ConsoleApp[836:303] string: (null) 但是当我修改代码到这个: NSString *myString = [[NSString alloc] initWithFormat:@"John"]; NSString * __weak weakString = myString; NSLog(@"Before: %@", weakString); //<— output to see if […]

嵌套块和引用自我

我有一个块,我使用self所以我宣布对自我的一个弱引用: __weak MyClass *weakSelf = self; 现在我的问题: 我在定义weakSelf遇到一个错误,我不明白这应该是什么意思。 无法在自动variables上指定弱属性 在我的街区里面,我将weakSelf传递给另一个街区,我不知道现在是否必须再次做同样的事情: __weak MyClass *weakWeakSelf = weakSelf; 然后把weakWeakSelf传给那个块?

以编程方式创build视图强Vs控制器中的弱子视图

我正在写一个使用Xcode 5.1.1的小型testing程序,用于iOS 7.1。 我没有使用Xib或Storyboard。 一切都以编程方式完成。 在AppDelegate.m中,我创build了一个TestViewController的实例,并将其设置为窗口的rootViewController。 在TestViewController.m中,我重写了“loadView”来创build和分配控制器的主视图。 TestViewController.h ——————– @interface TestViewController : UIViewController @property (nonatomic, weak) UILabel *cityLabel ; @end TestViewController.m ——————– @implementation TestViewController – (void)loadView { UIView *mainView = [[UIView alloc] init] ; self.view = mainView ; } – (void) viewDidLoad { UIView *addressView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)] ; [self.view addSubview:addressView] […]

弱的对象在NSDictionary?

我想存储在NSDictionary的对象的归零弱引用。 这是为了参考一个父NSDictionary ,所以我可以爬行备份大型结构,而不search。 我不能在这里使用__weak ; 即使我的本地引用很弱, NSDictionary也会存储一个强引用,这个对象被弱引用。 而且,当然, NSDictionary不能nil对象。 我在iOS上,而不是Mac,所以NSHashTable不可用。 我只想要一个对象变弱。 其余的依然强大。 (我要发布我的答案,所以如果没有更好的答案,我有一些可以接受的东西,但我希望有人有更好的答案。)

块中的弱自我

我是否需要检查弱自我是否为零? 我创buildweakSelf指针,如: __weak typeof(self) weakSelf = self; 并在我开始的块 if(!weakSelf){return;} 这是不必要的? 或者是否依赖于我是否正确地编写了其余部分,以便当自我死亡,其他人死亡?

当一个弱引用的对象(任意types)被释放时,我可以挂钩吗?

我正在编写一个Swift中的容器类,它的工作方式与Java java.util.WeakHashMap类似。 我目前的实施是在这里。 class WeakRefMap<Key: Hashable, Value: AnyObject> { private var mapping = [Key: WeakBox<Value>]() subscript(key: Key) -> Value? { get { return mapping[key]?.raw } set { if let o = newValue { mapping[key] = WeakBox(o) } else { mapping.removeValueForKey(key) } } } var count: Int { return mapping.count } } class WeakBox<E: AnyObject> { […]

objc_setAssociatedObject上的EXC_BAD_ACCESS使用-weak_library /usr/lib/libSystem.B.dylib链接器标志

当我使用链接器标志调用EXC_BAD_ACCESS时,我有一个EXC_BAD_ACCESS : -weak_library /usr/lib/libSystem.B.dylib链接器标志。 我绝对需要链接器标志, 因此 ,有人知道一个解决方法? (我也有dispatch_async崩溃,但我可以解决这个问题…另外,我在我的应用程序上构build了iOS 4专用function,与iOS 3兼容) 编辑:随着更多的研究,我发现这个和这个问题,但没有更多的答案…

ios混淆强/弱的参考

我已经浏览了关于强/弱引用的问题,并理解了使用弱(父母与子女关系)的原因。 但是,我对创build父子关系的特定场景感到困惑。 例如,将子视图添加到UIView对象。创build父/子关系的示例? 什么是? 到目前为止,我在我的项目中使用了强大的function,无处使用了弱点,但我不确定是否会遇到内存pipe理问题(或者甚至如何检查我是否会这样做)。 任何人都可以提供具体的情况或例子,在父母与子女的关系创build? 谢谢! 编辑:事实上,我收到一些“接收到的内存警告”的问题,在我的一个ViewControllers显示大量的数据(地图视图,图像,文本,button数量)。 一切财产都有一个强大的指针。 我需要修复这个ViewController的内存pipe理问题