Tag: 代表

Swift委托 – 何时在委托上使用弱指针

有人可以解释什么时候,什么时候不使用“弱”赋值给Swift中的委托指针,为什么? 我的理解是,如果您使用未定义为类的协议,则不能也不希望将委派指针分配给弱。 protocol MyStructProtocol{ //whatever } struct MyStruct { var delegate: MyStructProtocol? } 但是,当你的协议被定义为一个类types的协议,那么你想设置你的委托给一个弱指针? protocol MyClassProtocol:Class{ //whatever } class MyClass { weak var delegate: MyClassProtocol? } 我对么? 在苹果的快速指南中,类协议的例子并没有使用弱分配,但是在我的testing中,如果我的代表没有被弱引用,我会看到很强的参考周期。

为什么代表参考types?

关于接受答案的快速注解 :我不同意Jeffrey答案的一小部分,即由于Delegate必须是参考types,因此所有代表都是参考types。 (事实上​​,多级inheritance链排除了值types是不正确的,例如,所有枚举types都从System.Enuminheritance,而System.Enuminheritance自inheritance自System.Object System.ValueType , 所有引用)然而,我认为从根本上说,所有代表实际上不仅仅inheritance自Delegate而且来自MulticastDelegate是这里的关键实现。 正如Raymond在他的回答中指出的那样 ,一旦你承诺支持多个订阅者,那么考虑到在某个地方需要一个数组,对于委托本身不使用引用types是毫无意义的。 查看底部的更新。 我一直觉得奇怪,如果我这样做: Action foo = obj.Foo; 我每次都创build一个新的 Action对象。 我相信这个代价是微不足道的,但是它涉及内存的分配,以便以后被垃圾收集。 鉴于代表本质上是不变的,我想知道他们为什么不能成为价值types? 那么像上面那样的一行代码只会产生一个简单的分配给堆栈上的内存地址*。 即使考虑匿名function,似乎(对我 )这将工作。 考虑下面的简单例子。 Action foo = () => { obj.Foo(); }; 在这种情况下, foo确实构成closures ,是的。 在很多情况下,我想这确实需要一个实际的引用types(例如当局部variables被closures并在闭包中被修改时)。 但在某些情况下,它不应该。 例如,在上面的例子中,似乎支持封闭的types可能是这样的: 我收回了我原来的观点。 下面的确需要成为一个引用types(或者: 不需要 ,但是如果它是一个struct它将会被装箱)。 所以,忽略下面的代码示例。 我留下它只提供回答的上下文特别提到它。 struct CompilerGenerated { Obj obj; public CompilerGenerated(Obj obj) { this.obj = obj; } […]

在C#中将代理投射到Func

我有代码: public delegate int SomeDelegate(int p); public static int Inc(int p) { return p + 1; } 我可以把Inc成SomeDelegate或者Func<int, int> : SomeDelegate a = Inc; Func<int, int> b = Inc; 但是我不能把Inc成SomeDelegate ,然后用像这样的常用方法SomeDelegate为Func<int, int> : Func<int, int> c = (Func<int, int>)a; // Сompilation error 我怎么能做到这一点?

C# – 使用List <T> .Find()与自定义对象

我试图使用一个List<T>与我的自定义类,并能够在列表中使用像Contains() , Find()等方法。 我想我只是要重载运算符==但显然,这样做的一种方法是使用Find()的委托方法… 注意:现在,我重载了Equals()方法来使Contains()方法正常工作,但我仍然无法使Find()函数正常工作。 双方工作的最好方法是什么? 我在Linux上使用最新的C#/ .NET框架版本。 编辑:这是我的代码 using System; namespace GuerreDesClans { public class Reponse : IEquatable<Reponse> { public Reponse () { m_statement = string.Empty; m_pointage = 0; } public Reponse (string statement, int pointage) { m_pointage = pointage; m_statement = statement; } /* * attributs privés */ private string m_statement; private int […]

标准代表在C#中

有一些代表在C#中预定义 我知道这些: EventHandler // Default event callbacks EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs) Action // Function without return value and without parameter Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type Predicate<T> // […]

我如何描述返回值(非void)的Action <T>委托?

Action<T>委托返回void。 有没有其他内置的委托返回非空值?

获取对UIApplication委托的引用

我正在写我的第一个iPhone应用程序,我在切换视图时遇到了麻烦。 我有2个视图和每个在AppDelegate ( UIApplicationDelegate的实例)的引用。 我在applicationDidFinishLaunching创build了两个实例,并立即显示第一个视图。 这工作正常。 问题是其他视图的引用是在AppDelegate中 ,我无法弄清楚如何获得对它的引用,所以我可以切换到另一个视图。 有没有办法获得对主UIApplication或UIApplicationDelegate对象的引用?

在.NET中,事件处理的线程是什么?

我试图在c#中实现一个生产者/消费者模式。 我有一个消费者线程监视共享队列,和一个生产者线程放置到共享队列的项目。 生产者线程订阅接收数据…也就是说,它有一个事件处理程序,只是坐在旁边,并等待一个OnData事件触发(数据从第三方api发送)。 当它获得数据时,它将它放在队列中,以便消费者可以处理它。 当OnData事件在生产者中触发时,我曾预料它将由我的生产者线程来处理。 但是,这似乎并没有发生。 OnData事件看起来好像它正在一个新的线程上处理! 这是如何.NET总是工作…事件是在自己的线程处理? 我可以控制什么线程处理事件,当他们被提出? 如果几乎同时发生数百个事件会怎样呢?每个事件都有自己的线程?

你如何声明一个谓词委托内联?

我正在使用C#。 所以我有一个有一些领域的对象,其实并不重要。 我有这些对象的通用列表。 List<MyObject> myObjects = new List<MyObject>(); myObjects.Add(myObject1); myObjects.Add(myObject2); myObjects.Add(myObject3); 所以我想根据一些标准从我的列表中删除对象。 例如, myObject.X >= 10.我想使用RemoveAll(Predicate<T> match)方法来做到这一点。 我知道我可以定义一个可以传递给RemoveAll的委托,但是我想知道如何用匿名委托内联定义这个委托,而不是创build一堆仅用于一次的委托函数。

无法将typesViewController的值分配给types为UITextFieldDelegate的值?

这是我写这行的错误self.MessageTextField.delegate = self : /ChatApp/ViewController.swift:27:42:无法将types'ViewController'的值分配给types为'UITextFieldDelegate?'的值 这是我的Swift代码(ViewerController.swift): // // ViewController.swift // ChatApp // // Created by David Chen on 15/4/12. // Copyright (c) 2015年 cwsoft. All rights reserved. // import UIKit import Parse class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var messagesArray:[String] = [String]() @IBOutlet weak var MessageTableView: UITableView! @IBOutlet weak var ButtonSend: UIButton! @IBOutlet weak var […]