我觉得,每次我读C或C++程序时,其中一半或更多只是宏.我知道宏可以很酷但是它们很难跟踪,调试等.更不用说大多数编程语言甚至都没有定义像宏这样的东西(尽管Perl6会有类似的东西).
我个人总是找到一种方法来编写我的代码而不使用宏,无论是模板,多重继承等.我甚至觉得我不是一个优秀的程序员,因为所有的专业人员使用宏,我尽量避免使用它们如我所能.
问题是,如果没有宏,是否存在无法解决的问题?宏最终是一个好/坏的做法?我什么时候应该考虑使用宏?
我在这里阅读了很多关于NSManagedObjectContext和多线程应用程序的帖子.我还讨论了CoreDataBooks示例,以了解单独的线程如何需要自己的NSManagedObjectContext,以及保存操作如何与主NSManagedObjectContext合并.我发现这个例子很好,但也是应用程序特定的.我试图概括这一点,并想知道我的方法是否合理.
我的方法是使用通用函数来获取当前线程的NSManagedObjectContext.该函数返回主线程的NSManagedObjectContext,但如果从另一个线程中调用,则会创建一个新线程(或从缓存中获取它).具体如下:
+(NSManagedObjectContext *)managedObjectContext {
MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *moc = delegate.managedObjectContext;
NSThread *thread = [NSThread currentThread];
if ([thread isMainThread]) {
return moc;
}
// a key to cache the context for the given thread
NSString *threadKey = [NSString stringWithFormat:@"%p", thread];
// delegate.managedObjectContexts is a mutable dictionary in the app delegate
NSMutableDictionary *managedObjectContexts = delegate.managedObjectContexts;
if ( [managedObjectContexts objectForKey:threadKey] == nil ) {
// create a context for this thread
NSManagedObjectContext *threadContext = [[[NSManagedObjectContext alloc] init] …Run Code Online (Sandbox Code Playgroud) 我需要在[0,1]上找到函数f(t)= int g(t,x)dx的最小值.我在mathematica中所做的如下:
f[t_] = NIntegrate[g[t,x],{x,-1,1}]
FindMinimum[f[t],{t,t0}]
Run Code Online (Sandbox Code Playgroud)
然而,mathematica在第一次尝试时停止,因为NIntegrate不适用于符号t.它需要一个特定的值来评估.虽然Plot [f [t],{t,0,1}]完全有效,但FindMinimum在初始点停止.
我不能用Integrate替换NIntegrate,因为函数g有点复杂,如果你输入Integrate,mathematica就会继续运行......
有办法解决它吗?谢谢!
我想知道是否可以删除jqgrid的标题部分(带有网格标题和展开/折叠按钮的部分).不是列标题,而是整个Grid标头.
谢谢你的回答.
贝特朗
想要确保我正确使用课程.主脚本从用户接受:
1. month
2. year
3. the type of event they want to find (microsoft or linux)
Run Code Online (Sandbox Code Playgroud)
为了找到一个微软事件的程序,它必须运行正则表达式:'(ID =)+ [0-9] +'为了找到一个linux事件的程序,它必须运行正则表达式:'(ID =) + [AF] +"
创建Events类似乎是组织代码的合理方法.如果可能的话,我不想从主脚本中将所需的正则表达式发送到类中.我想告诉events类它是微软还是linux事件,让类根据每类事件类中预定义的变量返回处理过的数据.
我将现有代码编写为:
class Events
{
var $month;
var $year;
var $event_identifier_expression;
public function events($month, $year)
{
$this->month = $month;
$this->year = $year;
return $this->event_identifier_expression.$month.$year;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在Events类中使用类似多个静态帮助器方法的东西.如果我将现有代码更改为下面的代码,它是否允许我独立于类外部调用microsoft_events和linux_events,这是创建类的正确方法吗?(感谢来自类外部调用静态函数的示例代码):
class Events
{
public function __construct()
{var $month;
var $year;
var $event_identifier_expression;
}
public static function microsoft_events($month, $year)
{
$this->month = $month;
$this->year = $year;
$this->event_identifier_expression = '(ID=)+[0-9]+'; …Run Code Online (Sandbox Code Playgroud) 我试图使用一个TListView组件来显示相当大的数据列表(如4000行大),并且创建列表的速度非常慢 - 这需要2-3秒,这使得UI全部滞后并且几乎无法使用.
我在TListView.Items内部填充一个BeginUpdate/EndUpdate块,只有预分配的字符串 - 我的意思是:我构建了一个存储所有字符串的列表(没有人类明显的时间),然后我把它们放在TListView中.
我希望在vsReport具有多个列的模式下显示TListView的内容.
代码如下所示:
MyList.Items.BeginUpdate;
for i := 0 to MyCount - 1 do
begin
ListItem := MyList.Items.Add;
ListItem.Caption := StrCaptions[i];
ListItem.SubItems.Add(StrSubItems1[i]);
ListItem.SubItems.Add(StrSubItems2[i]);
end;
MyList.Items.EndUpdate;
Run Code Online (Sandbox Code Playgroud)
我在TListView组件的逻辑中错过了一些其他的黑客攻击吗?或者我应该忘记使用这个组件进行表演?
我试图弄清楚系统事件广播是否使用有序广播或正常广播.事件是EVENT_REMINDER,在calendarprovider的源代码中,我注意到它设置了一个警报管理器来发送广播.
我找不到警报器如何发送它.我的猜测是正常的广播,但是当我尝试一些事情时,我注意到我可以通过在我的广播接收器中建立睡眠来延迟系统的通知(尝试长达10秒).这表明它们是按顺序处理的,系统接收器仅在我的完成时才被调用.
但我能确定这种行为吗?(在所有1.5> sdk版本中)文档声明在某些情况下,正常的广播也是有序处理的.这是为了节省资源.
对此的所有想法都是受欢迎的....谢谢,阿诺德