我有一个结构良好的树,代表一个数学表达式.例如,给定字符串:"1+2-3*4/5"
,这将被解析为:
subtract(add(1,2),divide(multiply(3,4),5))
Run Code Online (Sandbox Code Playgroud)
这表示为这棵树:
我希望能够做的就是把这棵树尽可能地减少它.在上面的例子中,这很简单,因为所有的数字都是常量.然而,一旦我允许未知数(用a $
后面跟一个标识符表示),事情开始变得棘手:
"3*$a/$a"
变 divide(multiply(3,$a), $a)
这应该简化为3
,因为这些$a
术语应该相互抵消.问题是,"我如何以通用的方式认识到这一点?" 我如何认识到这min(3, sin($x))
将永远存在sin($x)
?我怎么认出那sqrt(pow($a, 2))
是abs($a)
?我怎么认识到nthroot(pow(42, $a), $a)
(第 42 个权力的根源)是42
?
我意识到这个问题相当广泛,但是我一直在打击这个问题一段时间并没有得到足够令人满意的东西.
我正在尝试获取Mac OS X 10.5+上所有用户和所有组的列表.我怎样才能做到这一点?
例如,我机器上所有用户的列表应该返回:(
_amavisd, _appowner, _appserver, _ard, _atsserver, _calendar, _carddav, _clamav, _coreaudiod, _cvmsroot, _cvs, _cyrus, _devdocs, _dovecot, _eppc, _installer, _jabber, _lda, _locationd, _lp, _mailman, _mcxalr, _mdnsresponder, _mysql, _pcastagent, _pcastserver, _postfix, _qtss, _sandbox, _screensaver, _securityagent, _serialnumberd, _softwareupdate, _spotlight, _sshd, _svn, _teamsserver, _timezone, _tokend, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _windowserver, _www, _xgridagent, _xgridcontroller, daemon, dave, nobody, root
这是手动编译的).
如何以编程方式获取该列表(以及所有组的相应列表)?我愿意接受替代(非基于c)的解决方案,例如Applescript,命令行等.
很久以后更新
TALlama的回答促使我调查了Open Directory的API,我发现这个列表可以通过编程方式轻松获取:
#import <OpenDirectory/OpenDirectory.h>
ODSession *s = [ODSession defaultSession];
ODNode *root = [ODNode nodeWithSession:s name:@"/Local/Default" error:nil];
ODQuery …
Run Code Online (Sandbox Code Playgroud) 我正在为学校项目编写一个ruby bootstrapping脚本,这个引导过程的一部分是启动一些后台进程(编写并正常运行).我想做的是:
`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
Run Code Online (Sandbox Code Playgroud)
但是,第一次调用时会阻塞执行daemon1.我已经看过一个Process.spawn
方法的引用,但这似乎是一个1.9+的功能,我只限于Ruby 1.8.
我也尝试从不同的线程执行这些守护进程,但我希望我的引导脚本能够退出.
那么我怎样才能启动这些后台进程,以便我的引导脚本不会阻塞并且可以退出(但仍然让守护进程在后台运行)?
首先,我知道已经提出过类似的问题,但到目前为止提供的答案并不是很有用(他们都建议使用以下选项之一).
我有一个用户应用程序需要确定特定进程是否正在运行.以下是我对该过程的了解:
root
)launchd
(pid 1)我已经尝试了几种方法来实现这一点,但到目前为止还没有任何方法.这是我尝试过的:
运行ps
并解析输出.这有效,但速度很慢(fork
/ exec
很贵),我希望尽可能快.
使用此处列出的GetBSDProcessList
功能.这也有效,但他们说检索进程名称(从每个结构访问)的方式是有缺陷的.结果只包含进程名称的前16个字符,可以在结构的定义中看到:kp_proc.p_comm
kinfo_proc
char*
kp_proc
#define MAXCOMLEN 16 //defined in param.h struct extern_proc { //defined in proc.h ...snip... char p_comm[MAXCOMLEN+1]; ...snip... };
使用libProc.h检索进程信息:
pid_t pids[1024]; int numberOfProcesses = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0); proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids)); for (int i = 0; i < numberOfProcesses; ++i) { if (pids[i] == 0) { continue; } …
正如标题所说,现在我可以简单地将HTML转换NSAttributedString
为initWithHTML:documentAttributes:
,但我想在这里做的是反向.是否有任何第三方库来实现这一目标?
@implementation NSAttributedString(HTML)
-(NSString *)htmlForAttributedString{
NSArray * exclude = [NSArray arrayWithObjects:@"doctype",
@"html",
@"head",
@"body",
@"xml",
nil
];
NSDictionary * htmlAtt = [NSDictionary
dictionaryWithObjectsAndKeys:NSHTMLTextDocumentType,
NSDocumentTypeDocumentAttribute,
exclude,
NSExcludedElementsDocumentAttribute,
nil
];
NSError * error;
NSData * htmlData = [self dataFromRange:NSMakeRange(0, [self length])
documentAttributes:htmlAtt error:&error
];
//NSAttributedString * htmlString = [[NSAttributedString alloc]initWithHTML:htmlData documentAttributes:&htmlAtt];
NSString * htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
return htmlString;
}
@end
Run Code Online (Sandbox Code Playgroud) 我现在从几个来源(stackoverflow.com,cocoa-dev,文档,博客等)中听到,在init和dealloc方法中使用访问器和设置(foo,setFoo :)是"错误的".据我所知,如果你这样做,很可能会混淆其他正在观察财产的物体.(这里给出一个简单的例子)
但是,由于以下原因,我不得不说我不同意这种做法:
新的Objective-C运行时(iPhone上的那个和10.5中的64位运行时)允许您在不声明相应的ivar的情况下声明属性.例如,以下类将在10.5或iPhone(设备,而不是模拟器)上编译得很好:
@interface Foo : NSObject { }
@property (retain) id someObject;
@end
@implementation Foo
@synthesize someObject;
@end
Run Code Online (Sandbox Code Playgroud)
理解上面是一个完全有效的Objective-C类,假设我决定编写一个初始化程序,并且出于内存管理的目的,使用dealloc方法(因为在iPhone上没有GC).我读过有关初始化器和释放器的所有内容都会让我编写以下两种方法:
- (id) init {
if (self = [super init]) {
//initialize the value of someObject to nil
[self setSomeObject:nil];
}
return self;
}
- (void) dealloc {
//setting someObject to nil will release the previous value
[self setSomeObject:nil];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
但是,根据文件和流行的观点,这是"错误的".所以我的问题是这样的:
如果其中任何一个的答案是"你不能",那么在init和dealloc方法中使用访问器怎么可能不好?
我目前有核心数据成功返回标题为特定实体的所有结果Event
:
NSManagedObjectContext *context = [delegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Event"
inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSError *error;
NSArray *fetchResults = [context executeFetchRequest:request error:&error];
Run Code Online (Sandbox Code Playgroud)
Event实体的一个属性是标题为的字符串tid
.我还有一个filterArray
包含所有允许的tid值的数组.
如何才能使我的Core Data请求仅返回具有与其中一个值匹配的tid属性的事件filterArray
?我相信答案与NSPredicate相关,但我还不熟悉它还没有达到我的意愿.
复制/ mutableCopy操作增量保留计数值?? (目标C)
我从设备iTunes库中获取一首歌并将其推入AVAsset:
- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
NSArray *arr = mediaItemCollection.items;
MPMediaItem *song = [arr objectAtIndex:0];
NSData *songData = [NSData dataWithContentsOfURL:[song valueForProperty:MPMediaItemPropertyAssetURL]];
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个Game Center方法来接收数据:
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
Run Code Online (Sandbox Code Playgroud)
我很难找到如何通过GameCenter发送这个AVAsset然后让它在接收设备上播放.
我读过:http: //developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioStreamReference/Reference/reference.html#//apple_ref/doc/uid/TP40006162
我迷失了.信息超载.
我已经实现了Cocoa With Love的音频流代码,但我无法弄清楚如何通过GameCenter获取我收到的NSData并将其推送到他的代码中. http://cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html
有人可以帮我解决这个问题吗?因此,我需要帮助的部分只是简单地将歌曲数据分解成数据包(或者它可以工作),然后迭代这些数据包并通过游戏套件发送它,然后解析它在接收设备上传入的数据作为播放它它进来了.
我想在Objective-C中的类方法中设置对象的委托.伪代码:
+ (ClassWithDelegate*) myStaticMethod {
if (myObject == nil) {
myObject = [[ClassWithDelegate alloc] init];
// myObject.delegate = ?
}
return myObject;
}
Run Code Online (Sandbox Code Playgroud)
在Java中,我只需创建一个实现委托协议的匿名类.如何在Objective-C中做类似的事情?
基本上我想避免创建一个单独的类(和文件)来实现一个简单的委托协议.