小编Chr*_*ick的帖子

Cocoa/Objective-C中内存管理的单元测试

您将如何编写单元测试 - 例如使用OCUnit - 以确保在Cocoa/Objective-C中正确释放/保留对象?

一个天真的方法是检查它的价值retainCount,但当然你永远不应该使用retainCount.您是否可以简单地检查对象的引用是否被赋值nil以指示它已被释放?另外,您对实际取消分配对象的时间有什么保证?

我希望只有几行代码的简洁解决方案,因为我可能会广泛使用它.实际上可能有两个答案:一个使用自动释放池,另一个不使用.

为了澄清,我不是在寻找一种全面测试我创建的每个对象的方法.全面地对任何行为进行单元测试是不可能的,更不用说内存管理了.但至少,最好检查已发布对象的行为以进行回归测试(并确保相同的与内存相关的错误不会发生两次).

关于答案

我接受了BJ Homer答案,因为我发现它是实现我想到的最简单,最简洁的方法,但需要注意的是,在XCode的生产版本中,提供自动引用计数的弱指针是不可用的.从2011年7月23日到4.2?)我也对这一点印象深刻

可以基于每个文件启用ARC; 它不要求整个项目使用它.您可以使用ARC编译单元测试并将主项目保留为手动保留释放,此测试仍然有效.

话虽如此,为了更详细地探讨Objective-C中单元测试内存管理所涉及的潜在问题,我强烈推荐Peter Hosey深入回应.

cocoa unit-testing memory-management objective-c ocunit

27
推荐指数
2
解决办法
2537
查看次数

如何在默认日历中以编程方式创建iCal事件?

如何使用Objective-C以编程方式在默认日历中创建iCal事件?我想检查事件是否已存在并相应地设置按钮状态.

iphone xcode calendar objective-c

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

将GeoPoint转换为位置

我知道这是一个非常无聊的问题 - 但是在Android平台上将GeoPointa 转换为a 的最佳方式是什么Location.

android google-maps geolocation

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

Foreach可以抛出InvalidCastException吗?

想象一下以下代码:

class foreach_convert
{
    public static void method2()
    {
        List<IComparable> x = new List<IComparable>();
        x.Add(5);

        foreach (string s in x)
        {
            //InvalidCastException in runtime
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道,为什么这种foreach行为如此...而不是C#?这里发生的是对子类的隐式强制转换,它容易出错,并且似乎在语言的其他任何地方都被禁止.或者我不对吗?

PS我之所以问的原因是我的项目中的类似代码中有一个错误,我曾经在外部库中迭代一个自定义集合,这被称为类似SomeTypeCollection,但实际上提供了一个基类型项集合并且可以包含SomeOtherType.我的错,但仍然没有语言,也没有编译器提供任何明确的提示/警告,这对C#来说很不寻常......

c# foreach language-design

19
推荐指数
2
解决办法
3905
查看次数

CSS3渐变,用于从Illustrator重现边界半径的"内部发光"效果

我正在努力绕过CSS3 Gradients(特别是径向的),并且这样做我想我已经为自己设置了一个相对艰难的挑战.

在Adobe Illustrator中,我创建了以下"按钮"样式.

按钮样式截图

为了创建这个图像,我创建了一个背景颜色为rgb(63,64,63)或的矩形#3F403F,然后"风格化"它的边界半径为15px.

然后我使用了25%不透明度,8px模糊,从中心白色的"内部发光".最后,我在它上面应用了3pt白色笔画.(如果您想要复制它,我告诉您所有这些,如果上面的图像不够用.)

所以,我的问题是:

是否可以使用CSS重新创建这个"按钮"而无需图像?

我知道Internet Explorer的"局限性"(为了这个实验,我不能给猴子们).我也知道webkit中的小'bug',它错误地渲染了一个背景颜色,边框半径和边框(背景颜色与颜色不同)的元素 - 它让背景颜色在弯曲处渗透角落.

到目前为止,我最好的尝试是相当可悲的,但这里的参考是代码:

section#featured footer p a
{
    color: rgb(255,255,255);
    text-shadow: 1px 1px 1px rgba(0,0,0,0.6);
    text-decoration: none;
    padding: 5px 10px;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
    border: 3px solid rgb(255,255,255);
    background: rgb(98,99,100);

    background: -moz-radial-gradient(
        50% 50%, 
        farthest-side, 
        #626364, 
        #545454
    );
    background: -webkit-gradient(
        radial, 
        50% 50%,
        1px,
        50% 50%,
        5px,
        from(rgb(98,99,100)),
        to(rgb(84,84,84))
    );
}
Run Code Online (Sandbox Code Playgroud)

基本上,太可怕了.感激地接受任何提示或提示,并提前感谢他们!

css gradient radial-gradients css3

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

选项列表:相当于Scala中的序列?

什么是sequenceScala中的Haskell ?我想将选项列表转换为列表选项.它应该像None任何选项一样出现None.

List(Some(1), None, Some(2)).???     --> None
List(Some(1), Some(2), Some(3)).???  --> Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

haskell scala sequence

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

为什么Objective-C使用头文件而不是像Java这样的单文件类?

我主要在Java工作,最近我正在尝试学习用于Mac和iOS应用开发的Objective-C.现在,这种语言与我习惯,指针,消息等完全不同,但我似乎正好接受它.这不是一个编码问题,但我宁愿熟悉我正在处理的事情,而不仅仅是知道"它必须是这样的,因为它就是这样".

为什么Objective-C语言需要头文件?它们与.m文件分开的实际目的是什么?为什么函数需要在头文件中声明而不是刚刚实现?它只是其中一个没有从旧语言中消失的东西,还是与Java的单文件类相比有真正的优势?

java objective-c header-files

14
推荐指数
3
解决办法
3960
查看次数

无法在C++中的模板初始化列表中使用lambda

我有一个带有std :: function构造函数参数的类.

class ClazzA{
public:
    ClazzA(function<void()> foo){}
    ClazzA(){
        ClazzA([](){});
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我有一个这个类的实例作为另一个的成员,我必须在初始化列表中调用构造函数.我可以传递一个lambda作为参数,它会自动转换:

class ClazzB{
public:
    ClazzA a;
    ClazzB() :
      // works fine:
      a([](){}){}
};
Run Code Online (Sandbox Code Playgroud)

但是如果ClazzB是模板,lambda不起作用:

template<typename T> class ClazzC{
public:
    ClazzA a;
    //works fine:
    ClazzC(function<void()> foo) : a(foo){}
    //doesn't work:
    ClazzC() :
      //syntax error : ')'
      a([](){})
      //syntax error : '{'
      //unexpected token(s) preceding '{'; skipping apparent function body
      {}
};
Run Code Online (Sandbox Code Playgroud)

编译器是MSVC++ 2010.我不明白我做错了什么或为什么不支持这种语法.

起初ClazzA也是一个模板,功能有点复杂,所以我认为这是模板化lambda或其他问题.但在我删除所有代码之后问题仍然存在.

UPD:尝试在MinGW G ++中编译,它可以工作.看起来像Visual Studio问题.

c++ lambda templates constructor c++11

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

如何在Lucene 3.0.2中索引和搜索文本文件?

我是Lucene的新手,我在创建简单的代码来查询文本文件集时遇到了一些问题.

我试过这个例子,但是与新版本的Lucene不兼容.

UDPATE: 这是我的新代码,但它仍然无法正常工作.

java lucene indexing text-files

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

从文本中提取关键短语(1-4字ngrams)

从一段文本中提取关键短语的最佳方法是什么?我正在编写一个关键字提取工具:类似这样的东西.我找到了一些用于Python和Perl的库来提取n-gram,但是我在Node中写这个,所以我需要一个JavaScript解决方案.如果没有任何现有的JavaScript库,有人可以解释如何执行此操作,以便我自己编写吗?

javascript keyword n-gram

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