我正在编写一个使用Core Data来保持模型的iPhone 3.0应用程序.我希望应用程序安装默认数据集.在为iPhone <3.0开发时,我使用SQL脚本在运行构建之前初始化数据库,然后将准备好的.sqlite文件部署为应用程序资源.Core Data的最佳方法是什么?
结论:最后我写了一个通用的XML处理程序.元素名称映射到Objective-C类名和属性名.元素中的PCDATA值被转换为在元素命名的属性上声明的类型.子元素或属性元素被解析为对象实例 - 因此通过解析XML文档,构建了对象图.我不得不首先掌握Objective-C运行时:-)
示例目标类:
@interface Widget : NSObject {
@private
NSString* name;
NSSet* sprockets;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSSet* sprockets;
- (void)addSprocketsObject:(Sprocket*)value;
@end
@interface Sprocket : NSObject {
@private
NSString* name;
NSNumber* canFly;
NSNumber* wheels;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSNumber* canFly;
@property (nonatomic, retain) NSNumber* wheels;
@end
Run Code Online (Sandbox Code Playgroud)
示例默认数据:
<data>
<Sprocket id="sprocket-1">
<name>Sprocket1</name>
<wheels>4</wheels>
</Sprocket>
<Widget id="widget-1">
<name>MyWidget</name>
<sprockets>
<Sprocket ref-id="sprocket-1"/>
<Sprocket id="sprocket-2">
<name>Sprocket2</name>
<canFly/> …Run Code Online (Sandbox Code Playgroud) 有效的Java以及其他来源表明我们应该考虑使用组合而不是继承.通常使用Decorator模式并实现将调用委托给包装对象的转发方法,我经常发现自己实现了这样的组合.
但是,我经常发现自己编写了许多类型的简单转发方法:
public void myMethod(String name) {
instance.myMethod(name);
}
Run Code Online (Sandbox Code Playgroud)
无论如何在Eclipse(3.4.x)中自动生成这些转发方法?
我最近更改了网络,并从OSX(Leopard)上的系统偏好设置/网络面板中删除了所有HTTP代理设置.但是,现在每当我使用Eclipse时,Java HTTP代理系统属性似乎都"自动"设置为使用我现在已经不存在的HTTP代理.
我找不到在我的系统上任何地方直接引用此代理,删除并重新安装Eclipse,监视网络流量以排除任何代理自动配置,但此代理配置仍然存在于Mac OSX JVM上.
这是我在Eclipse配置细节中看到的:
http.proxyHost=zombie
http.proxyPort=8080
https.proxyHost=zombie
https.proxyPort=8080
Run Code Online (Sandbox Code Playgroud)
我可以通过在Eclipse偏好设置中手动配置没有主机名或端口的代理来解决这个问题,但这似乎并不坚持,僵尸系统代理最终会从死机中升起.
我个人认为这是某种Apple JVM错误 - 但是有人能告诉我如何在不重新安装操作系统的情况下杀死这些僵尸HTTP代理设置吗?
我已经使用Objective-C在iPhone上开发了几个月了,而且我在使用Java开发应用程序时应用了最佳实践.这些包括:设计具有单一责任的类,在适当情况下应用设计模式,以及编写仅执行一项操作的简短方法.对我来说,这些实践从清洁代码的角度来看都是有益的,并且在很大程度上与域无关.
我对结果非常满意.然而,一些iPhone开发人员已经独立地建议我反对这一点,因为他们说我写了太多的课程和太多的方法.在不同的时间我被警告:
在实践中,我没有遇到过这些问题.从表面上看一些iPhone性能指标来看,在我看来,实现常见模式和简短方法所需的额外方法调用和对象生命周期开销不太可能产生任何用户可察觉的延迟.但是,其他iPhone开发者的建议让我感到害怕.
我想继续学习和改进过去一直很好用的领域不可知的编程实践,但是当我在iPhone上开发时,我不希望走下一条痛苦的路线!
所以关于这个平台 - 我应该抛弃一些常见的最佳实践,并更加意识到优化方法调用和对象生命周期开销吗?或者我应该继续遵循Knuth的建议:
过早优化是编程中所有邪恶(或至少大部分)的根源
我可以从 CLI 执行什么命令或一系列命令来递归遍历目录树并将该树中所有 PNG 文件的位深度从 24bpp 减少到 16bpp?命令应该保留 alpha 层并且不应该增加 PNG 的文件大小 - 事实上减少会更可取。
我有一个基于 OSX 的系统可供我使用,并且熟悉该find命令,因此我真的更想找到合适的 PNG 实用程序命令。
我正在努力让Dozer屈服于我的意志,我觉得应该很简单.我有两个相似的模型,我想在它们之间进行映射,但是一个具有比另一个更"深"的层次结构,这在处理集合时会引起我的问题.考虑以下类:
来源类:
class Foo {
String id;
NameGroup nameGroup;
// Setters/Getters
}
class NameGroup {
private List<Name> names;
// Setters/Getters
}
class Name {
private String nameValue;
// Setters/Getters
}
Run Code Online (Sandbox Code Playgroud)
目的地类:
class Bar {
private String barId;
private BarNames barNames;
// Setters/Getters
}
class BarNames {
private List<String> names;
// Setters/Getters
}
Run Code Online (Sandbox Code Playgroud)
现在我想要以下单向映射:
Foo.id -> Bar.barId // Simple enough
Run Code Online (Sandbox Code Playgroud)
但我需要:
Foo.nameGroup.names.nameValue -> Bar.barNames.names
Run Code Online (Sandbox Code Playgroud)
因此,每个Name实例都Foo.nameGroup.names应该导致String添加到BarNames.names列表中.这可能吗?
我有一个项目,目前正在执行许多外部程序java.lang.Process.假设它们的功能也以本机库形式提供,那么使用JNA执行所述库函数的优势是什么?
流程执行相当繁重 - 需要几秒钟才能完成.我是否认为性能提升最小?
我使用Spring的@Component注释来配置Spring 3.0应用程序中的许多bean.我想知道是否可以懒惰地构建一些这些豆 - 尤其是prototype豆类?
我正在为iPhone编写一些静态库,并希望拥有单元测试套件.XCode 3为静态库和单元测试提供了模板,但我想知道它们应该如何在静态库项目中组合在一起?
在我的静态库项目中,我已经为单元测试创建了一个目标,但是期望创建一个可执行文件来启动单元测试而不是运行静态库中的类.
这样做的程序是什么?
java ×6
iphone ×3
eclipse ×2
macos ×2
annotations ×1
bit-depth ×1
bpp ×1
coding-style ×1
command-line ×1
composition ×1
core-data ×1
dozer ×1
exec ×1
inheritance ×1
javabeans ×1
jna ×1
jvm ×1
lazy-loading ×1
linux ×1
objective-c ×1
oop ×1
optimization ×1
performance ×1
png ×1
proxy ×1
spring ×1
unit-testing ×1
xcode ×1