标签: weak

使用符合协议AnyObject的具体类型不受支持

我正在使用Swift 2并使用WeakContainer作为存储一组弱对象的方式,就像 NSHashTable.weakObjectsHashTable()

struct WeakContainer<T: AnyObject> {
    weak var value: T?
}

public protocol MyDelegate : AnyObject {

}
Run Code Online (Sandbox Code Playgroud)

然后在我的ViewController中,我声明

public var delegates = [WeakContainer<MyDelegate>]
Run Code Online (Sandbox Code Playgroud)

但这是错误的

使用MyDelegate作为符合协议AnyObject的具体类型不受支持

我看到的错误是,WeakContainer具有value声明为成员weak,因此T有望成为对象.但我也声明MyDelegateAnyObject也.怎么解决这个问题?

protocols reference hashtable weak swift

33
推荐指数
3
解决办法
8128
查看次数

究竟是什么'__weak typeof(self)weakSelf = self;' 意思

这用于Objective-C 的弱化模式

我的猜测是它意味着:为自己分配一个名为'weakSelf'的自我弱引用和自我类型(例如MyViewController)

如果它是正确的并且看起来很明显:我希望绝对确保做到这一点.谢谢.

typeof objective-c weak

26
推荐指数
3
解决办法
2万
查看次数

如何与GCC进行弱连接工作?

似乎有3种方法告诉GCC弱连接符号:

  • __attribute__((weak_import))
  • __attribute__((weak))
  • #pragma weak symbol_name

这些都不适合我:

#pragma weak asdf
extern void asdf(void) __attribute__((weak_import, weak));
...
{
    if(asdf != NULL) asdf();
}
Run Code Online (Sandbox Code Playgroud)

我总是得到这样的链接错误:

Undefined symbols:
  "_asdf", referenced from:
      _asdf$non_lazy_ptr in ccFA05kN.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

我在OS X 10.5.5上使用GCC 4.0.1.我究竟做错了什么?

c linker gcc weak

23
推荐指数
4
解决办法
4万
查看次数

ARC项目中的NSTextView的IBOutlet

当你读到这里在大多数情况下,IBOutlet应该是弱.

现在,您可以在开发库中阅读并非所有类都支持弱引用.(例如NSTextView).这意味着您必须使用assign:

@property (assign) IBOutlet NSTextView *textView;
Run Code Online (Sandbox Code Playgroud)

如果使用弱引用,您将收到以下错误:"不允许合成弱不可用属性,因为它需要合成__weak对象的ivar"

文档错过的内容是现在你必须在使用后再将属性设置为nil,例如通过一种dealloc方法:

- (void)dealloc
{
    self.textView = nil;
} 
Run Code Online (Sandbox Code Playgroud)

据我所知,标NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE有的类不支持弱引用,但原因是什么?

weak nstextview iboutlet automatic-ref-counting

21
推荐指数
1
解决办法
1755
查看次数

如何在一个块之外的swift中创建一个弱指针

我想像我们在Objective-c中所习惯的一样快速地指向自我

 __weak Something *weakself = self;
Run Code Online (Sandbox Code Playgroud)

我找到人们解释如何在一个街区内使用"弱自我",

    { in [unowned self] ...}
Run Code Online (Sandbox Code Playgroud)

但是我不想在我的块中定义'weakself',我想在块之外定义弱自己

closures block weak swift

18
推荐指数
2
解决办法
1万
查看次数

带有弱引用键的Swift字典?

假设我有一些表示网络连接的对象.断开这些连接后,关联的对象将消失.我不想挂在不再连接的连接对象上.

我还想使用字典将一些数据与这些连接相关联.所以我可能有代码:

class Connection { ... }
class Metadata { ... }

var metadata: [Connection: Metadata] = [:]
Run Code Online (Sandbox Code Playgroud)

但是上面的代码意味着字典将保留对Connection我不想要的对象的引用.当Connection对象消失时,我更愿意删除关联的条目,理想情况是自动删除.

所以我尝试过:

var metadata: [weak Connection: Metadata] = [:]
Run Code Online (Sandbox Code Playgroud)

但这不起作用.什么是一个很好的替代解决方案?

dictionary weak swift

16
推荐指数
1
解决办法
5570
查看次数

有一个boost :: weak_intrusive_pointer吗?

由于遗留原因,我需要使用侵入式指针,因为我需要能够将原始指针转换为智能指针.

但是我注意到没有弱的侵入式指针可以提升.我确实在boost线程列表上找到了关于它的讨论,但没有具体的.

有谁知道弱侵入指针的线程安全实现?

谢谢Rich

c++ boost pointers weak

14
推荐指数
2
解决办法
2618
查看次数

Mac OS X上的弱符号链接

目前我在使用Xcode 4.0.2的Mac OS X 10.6.7上遇到了弱链接问题.

robin@chameleon:/tmp/o$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
Run Code Online (Sandbox Code Playgroud)

正如文档http://developer.apple.com/library/mac/#technotes/tn2064/_index.html所说,我们可以使用gcc 属性((weak_import))作为弱链接符号.但是,以下示例代码始终抛出编译错误.如下:

weak.c:

#include <stdlib.h>
#include <stdio.h>

extern int SayHello() __attribute__((weak));

int main()
{
    int result;

    if (SayHello!=NULL)
    {
        printf("SayHello is present!\n");
        result=SayHello();
    }
    else
        printf("SayHello is not present!\n");
}
Run Code Online (Sandbox Code Playgroud)

错误消息如下:

robin@chameleon:/tmp/o$ gcc weak.c 
Undefined symbols for architecture x86_64:
  "_f", referenced from:
      _main in cceOf2wN.o
     (maybe you meant: __dyld_func_lookup)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned …
Run Code Online (Sandbox Code Playgroud)

macos linker linker-errors weak

10
推荐指数
1
解决办法
4110
查看次数

使用块时避免保留周期的正确方法是什么

在NSMutableArray中添加对象的正确方法是什么,该对象由属性强烈定义.

[tapBlockView setTapBlock:^(UIImage* image) {
   [self.myImageArray addObject:image]; // self retain cycle
}
Run Code Online (Sandbox Code Playgroud)

如果我将创建弱引用之类的东西

__weak NSMutableArray *array = self.myImageArray;
[tapBlockView setTapBlock:^(UIImage* image) {
    [array addObject:image]; // If I will do this then how will I update original Array ?
}
Run Code Online (Sandbox Code Playgroud)

我也试过了

__weak id weakSelf = self;
[tapBlockView setTapBlock:^(UIImage* image) {
    [weakSelf storeImageInaNewMethod:image]; // Calling SToreImageInaNewMethod
}
Run Code Online (Sandbox Code Playgroud)

-(void)storeImageInaNewMethod:(UIImage*)image {
   [self.myImageArray addObject:image]; // This again retaining cycle
}
Run Code Online (Sandbox Code Playgroud)

更新属性定义的原始对象的正确方法是什么?

iphone block objective-c weak automatic-ref-counting

10
推荐指数
2
解决办法
3379
查看次数

Xcode 7,弱指针的重复相同地址

我对Xcode 7中看到的东西感到有些困惑,下面的3种颜色都有你想要的单独地址,但弱颜色都有相同的地址.我知道弱色是选项,所以weak_R和color_R有不同的地址,但我不能完全解释为什么所有3个弱显示相同的地址.

这看起来是否正确,如果是,有人可以解释我所看到的吗?如果不是我猜它是一个错误.

    var color_R = SKColor.redColor()
    var color_G = SKColor.greenColor()
    var color_B = SKColor.blueColor()
    weak var weak_R = color_R
    weak var weak_G = color_G
    weak var weak_B = color_B
Run Code Online (Sandbox Code Playgroud)

DEBUG

在此输入图像描述

var weak swift xcode7

7
推荐指数
0
解决办法
193
查看次数