您将如何编写单元测试 - 例如使用OCUnit - 以确保在Cocoa/Objective-C中正确释放/保留对象?
一个天真的方法是检查它的价值retainCount,但当然你永远不应该使用retainCount.您是否可以简单地检查对象的引用是否被赋值nil以指示它已被释放?另外,您对实际取消分配对象的时间有什么保证?
我希望只有几行代码的简洁解决方案,因为我可能会广泛使用它.实际上可能有两个答案:一个使用自动释放池,另一个不使用.
为了澄清,我不是在寻找一种全面测试我创建的每个对象的方法.全面地对任何行为进行单元测试是不可能的,更不用说内存管理了.但至少,最好检查已发布对象的行为以进行回归测试(并确保相同的与内存相关的错误不会发生两次).
我接受了BJ Homer的答案,因为我发现它是实现我想到的最简单,最简洁的方法,但需要注意的是,在XCode的生产版本中,提供自动引用计数的弱指针是不可用的.从2011年7月23日到4.2?)我也对这一点印象深刻
可以基于每个文件启用ARC; 它不要求整个项目使用它.您可以使用ARC编译单元测试并将主项目保留为手动保留释放,此测试仍然有效.
话虽如此,为了更详细地探讨Objective-C中单元测试内存管理所涉及的潜在问题,我强烈推荐Peter Hosey的深入回应.
如何使用Objective-C以编程方式在默认日历中创建iCal事件?我想检查事件是否已存在并相应地设置按钮状态.
想象一下以下代码:
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#来说很不寻常......
我正在努力绕过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)
基本上,太可怕了.感激地接受任何提示或提示,并提前感谢他们!
什么是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) 我主要在Java工作,最近我正在尝试学习用于Mac和iOS应用开发的Objective-C.现在,这种语言与我习惯,指针,消息等完全不同,但我似乎正好接受它.这不是一个编码问题,但我宁愿熟悉我正在处理的事情,而不仅仅是知道"它必须是这样的,因为它就是这样".
为什么Objective-C语言需要头文件?它们与.m文件分开的实际目的是什么?为什么函数需要在头文件中声明而不是刚刚实现?它只是其中一个没有从旧语言中消失的东西,还是与Java的单文件类相比有真正的优势?
我有一个带有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问题.
从一段文本中提取关键短语的最佳方法是什么?我正在编写一个关键字提取工具:类似这样的东西.我找到了一些用于Python和Perl的库来提取n-gram,但是我在Node中写这个,所以我需要一个JavaScript解决方案.如果没有任何现有的JavaScript库,有人可以解释如何执行此操作,以便我自己编写吗?
objective-c ×3
java ×2
android ×1
c# ×1
c++ ×1
c++11 ×1
calendar ×1
cocoa ×1
constructor ×1
css ×1
css3 ×1
foreach ×1
geolocation ×1
google-maps ×1
gradient ×1
haskell ×1
header-files ×1
indexing ×1
iphone ×1
javascript ×1
keyword ×1
lambda ×1
lucene ×1
n-gram ×1
ocunit ×1
scala ×1
sequence ×1
templates ×1
text-files ×1
unit-testing ×1
xcode ×1