小编Eta*_*tan的帖子

何时使用NSNotificationCenter

我希望在一个对象的多个事件上有多个观察者(1对N关系).

实现这一任务的机制由提供NSNotificationCenter.当用于我的问题时,该机制看起来相当矫枉过正.

如何在不使用以下情况下手动完成NSNotificationCenter:

- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
Run Code Online (Sandbox Code Playgroud)

从我的对象添加和删除观察者.

- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
    for (id delegate in delegates) {
        NSObject *data = [eventData copy];
        [delegate someEventFired:data];
    }
}
Run Code Online (Sandbox Code Playgroud)

这种机制是直接的,易于实现,而对象不必共享其他字符串.

  • 除了NSNotificationCenter?之外,iOS框架中是否存在1对N代表(如C#事件)的官方模式?
  • 什么时候应该NSNotificationCenter使用,何时不使用?
  • 什么时候应该使用像我在这里建议的实现,什么时候不使用?

architecture objective-c nsnotificationcenter ios observer-pattern

13
推荐指数
1
解决办法
7232
查看次数

使用带有自定义删除器的shared_ptr使HANDLE RAII兼容

我最近在SO上发布了关于RAII的一般性问题.但是,我的HANDLE示例仍然存在一些实现问题.

A HANDLE是typedeffed void *in windows.h.因此,shared_ptr需要正确的定义

std::tr1::shared_ptr<void> myHandle (INVALID_HANDLE_VALUE, CloseHandle);
Run Code Online (Sandbox Code Playgroud)

示例1 CreateToolhelp32Snapshot:返回HANDLE并工作.

const std::tr1::shared_ptr<void> h
    (CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL), CloseHandle);
Run Code Online (Sandbox Code Playgroud)

当我void在定义中使用时(正确的方法是什么?)问题继续存在,当我尝试用这个指针调用更多的winapi命令时.它们在功能上有效,但很难看,我相信必须有更好的解决方案.

在以下示例中,h是一个通过顶部定义创建的指针.

例2 OpenProcessToken:最后一个参数是a PHANDLE.与演员一样丑陋.

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
    (PHANDLE)&h);
Run Code Online (Sandbox Code Playgroud)

例3 Process32First:第一个参数是a HANDLE.非常丑陋.

Process32First(*((PHANDLE)&h), &pEntry);
Run Code Online (Sandbox Code Playgroud)

例4简单比较常数HANDLE.非常丑陋.

if (*((PHANDLE)&h) == INVALID_HANDLE) { /* do something */ }
Run Code Online (Sandbox Code Playgroud)

为HANDLE创建正确的shared_ptr的正确方法是什么?

c++ winapi raii

11
推荐指数
1
解决办法
6442
查看次数

实施Harris角点探测器

我正在实施一个Harris角点探测器用于教育目的,但我坚持使用哈里斯响应部分.基本上,我在做的是:

  1. 在x和y方向上计算图像强度梯度
  2. 模糊输出(1)
  3. 计算哈里斯对(2)输出的响应
  4. 在3x3邻域和阈值输出中抑制(3)的输出中的非最大值

1和2似乎工作正常; 然而,随着哈里斯的反应,我得到的值非常小,没有任何一点达到阈值.输入是标准的户外摄影.

[...]
[Ix, Iy] = intensityGradients(img);
g = fspecial('gaussian');
Ix = imfilter(Ix, g);
Iy = imfilter(Iy, g);
H = harrisResponse(Ix, Iy);
[...]

function K = harrisResponse(Ix, Iy)
    max = 0;
    [sy, sx] = size(Ix);
    K = zeros(sy, sx);
    for i = 1:sx,
        for j = 1:sy,
            H = [Ix(j,i) * Ix(j,i), Ix(j,i) * Iy(j,i)
                Ix(j,i) * Iy(j,i), Iy(j,i) * Iy(j,i)];
            K(j,i) = det(H) / trace(H);
            if K(j,i) > max,
                max = K(j,i);
            end
        end …
Run Code Online (Sandbox Code Playgroud)

algorithm matlab computer-vision feature-detection corner-detection

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

设置mex以使用Visual Studio 2010编译器

我安装了Visual Studio 2010.但是,MATLAB找不到编译器.

>> mex -setup
Please choose your compiler for building external interface (MEX) files: 

Would you like mex to locate installed compilers [y]/n? y

Select a compiler: 

[0] None 

Compiler:
Run Code Online (Sandbox Code Playgroud)

如果我回答n这个问题,我会得到以下信息

Would you like mex to locate installed compilers [y]/n? n

Select a compiler: 
[1] Intel C++ 11.1 (with Microsoft Visual C++ 2008 SP1 linker) 
[2] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker) 
[3] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 …
Run Code Online (Sandbox Code Playgroud)

configuration matlab mex visual-studio-2010

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

10.11 NSCollectionView - 动态确定单元大小

适用于OS X v10.11的AppKit发行说明建议可以基于每个项目调整集合视图项目的大小:

可以为所有CollectionView的项目全局确定项目大小(通过设置NSCollectionViewFlowLayout的"itemSize"属性),也可以从一个项目到下一个项目(通过在CollectionView的委托上实现-collectionView:layout:sizeForItemAtIndexPath:)进行更改.

在我的例子中,我的CollectionViewItem包含一个包含不同长度字符串的标签.我正在使用NSCollectionView来显示字符串数组,因为NSStackViews不支持数组绑定,并且不会流向新行.字符串数组通过数组控制器绑定到NSCollectionView的内容.

我的项目的nib文件已正确设置,根视图和标签都具有内容拥抱内容压缩阻力优先级1000,并且边缘通过AutoLayout对齐.

现在,NSCollectionViewLayout的委托方法具有以下签名:

func collectionView(collectionView: NSCollectionView, 
                    layout collectionViewLayout: NSCollectionViewLayout, 
                    sizeForItemAtIndexPath indexPath: NSIndexPath) -> NSSize
Run Code Online (Sandbox Code Playgroud)

我现在的想法是抓住项目本身,对其进行布局传递,然后返回新项目大小.

let item = collectionView.itemAtIndexPath(indexPath)!
item.view.layout()
return item.view.bounds.size
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是itemAtIndexPath返回nil.如果我以零值返回默认大小,则默认大小将用于所有单元格.

如何设置NSCollectionView以尊重我的项目的AutoLayout约束,并为每个单元格动态使用计算的大小?

macos cocoa nscollectionview nscollectionviewitem autolayout

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

Silverlight套接字超时

Socket在Silverlight应用程序中使用s将数据从服务器传输到客户端.

但是,我不太确定如何在Silverlight中处理超时Socket.
在文档中,我看不到像ReceiveTimeoutSilverlight 那样的东西.

  • 用户定义的超时是否可行?我该怎么设置它们?如何在发送/接收操作超时时收到通知?
  • 是否有默认超时?他们多大?
  • 如果没有超时:手动实现这些超时的最简单方法是什么?

c# sockets silverlight timeout

9
推荐指数
2
解决办法
975
查看次数

了解WMI对象路径格式

我想编写一个与.NET ManagementPath类具有相似功能的类.在MSDN上是一组处理对象路径格式的文章.但是,我对所有特殊情况都不了解

  • 处理对象路径的字符串比较始终不区分大小写.==>在查询对象实例时,这是否也适用于键的值?

  • 整数的十六进制常量.==>它们会在哪里发生?只在键的值?

  • 具有带布尔值的键的类的布尔常量.==>常数是什么?真假?0/1?

  • 具有部分命名空间路径的假定本地服务器.因此,指定root和default命名空间意味着本地服务器上的root和default命名空间.==>这只是意味着如果我没有指定服务器,那么"." 用作服务器?

  • 元素内或元素之间没有空格.==>为什么原始的.NET实现允许服务器名称中的空格呢?

  • 允许在对象路径中使用嵌入式引号,但必须使用转义字符分隔引号,如在C或C++应用程序中那样.==> ???

  • 只有十进制值被识别为键的数字部分.==> ???

  • 此页面上的所有内容:http://msdn.microsoft.com/en-us/library/aa389223( v = VS.85).aspx ==>?

那么,我认为有效的基本路径看起来像

\\Server\Namespace
        \Namespace
\\Server\Namespace:Class
        \Namespace:Class
                   Class
\\Server\Namespace:Class.KeyName=KeyValue
        \Namespace:Class.KeyName=KeyValue
                   Class.KeyName=KeyValue
\\Server\Namespace:Class=KeyValue
        \Namespace:Class=KeyValue
                   Class=KeyValue
\\Server\Namespace:Class.FirstKey=FirstValue,SecondKey=SecondValue
        \Namespace:Class.FirstKey=FirstValue,SecondKey=SecondValue
                   Class.FirstKey=FirstValue,SecondKey=SecondValue
\\Server\Namespace:Class=@
        \Namespace:Class=@
                   Class=@
as well as all combinations were the \\ is replaced by a // and/or the 
\ between server and namespace is replaced by /
Run Code Online (Sandbox Code Playgroud)

我忘记了什么吗?

这是可以从MSDN中提取的内容.但是,个人令牌怎么样?这是我认为它可能是:

KeyValue = "string"      <-- string
           1             <-- numeric …
Run Code Online (Sandbox Code Playgroud)

.net c# regex wmi parsing

9
推荐指数
1
解决办法
1534
查看次数

用于在查询范围内有效查找整数的数据结构

已知范围内存在任意数量的不同无符号整数值.

整数值的数量是<<范围内的整数数.

我想构建一个允许以下运行时复杂性的数据结构:

  1. 插入O(1)
  2. 插入完成后:
    • 删除O(1)
    • 获取O(k)中查询范围内的所有值,其中k是结果值的数量(不必对返回值进行排序)

内存复杂性不受限制.但是,天文数量太大的内存不可用;-)

这是一个例子:

  • range = [0,1023]
  • 插入42
  • 插入350
  • 插入729
  • 插入64
  • 插入1
  • 插入680
  • 插入258
  • 在[300; 800]中找到值; 返回{350,729,680}
  • 删除350
  • 删除680
  • 在[35; 1000]中找到值; 返回{42,258,64,729,258}
  • 删除42
  • 删除258
  • 找到[0; 5]; 返回{1}
  • 删除1

这样的数据结构是否可能?(借助查询表等)?

我想到的近似值是:

  • 将插入的值插入桶中.0..31 =>桶0,32..63 =>桶1,64..95 =>桶2,96..127 =>桶3,...

  • 插入:使用简单的移位算法查找存储桶ID,然后将其插入每个存储桶的数组中

  • 查找:使用移位算法查找start和endpoint的bucket id.查看第一个和最后一个存储桶中的所有值,并检查它们是否在范围内或范围之外.将所有中间桶中的所有值添加到搜索结果中

  • 删除:使用shift查找存储桶ID.使用存储桶中的最后一个值切换要删除的值,然后减少此存储桶的计数.

缺点:如果有许多查询查询范围小于32的值,则每次都会搜索整个存储桶.

下侧2:如果范围内有空桶,则在搜索阶段也会访问它们.

algorithm optimization data-structures

9
推荐指数
1
解决办法
1445
查看次数

数据与 [UInt8]

Swift 提供Data[UInt8]类型,它们的作用非常相似。

  • 两者之间有什么区别?
  • 在设计新 API 时,首选类型是什么?

nsdata swift

9
推荐指数
1
解决办法
1816
查看次数

如何使用C API创建嵌套的Lua表

我想创建一个像这样的表

myTable = {
    [0] = { ["a"] = 4, ["b"] = 2 },
    [1] = { ["a"] = 13, ["b"] = 37 }
}
Run Code Online (Sandbox Code Playgroud)

使用C API?

我目前的做法是

lua_createtable(L, 0, 2);
int c = lua_gettop(L);
lua_pushstring(L, "a");
lua_pushnumber(L, 4);
lua_settable(L, c);
lua_pushstring(L, "b");
lua_pushnumber(L, 2);
lua_settable(L, c);
Run Code Online (Sandbox Code Playgroud)

在循环中创建内部表.之前,这个循环,我用

lua_createtable(L, 2, 0);
int outertable = lua_gettop(L);
Run Code Online (Sandbox Code Playgroud)

为2个数字槽创建外部表.

但是如何将内部表保存到外部表?

c++ lua lua-api lua-table

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