我正在从第三方提供的URL加载图像.URL上没有文件扩展名(或文件名)(因为它是一个模糊的URL).我可以从中获取数据(以NSData的形式)并将其加载到UIImage中并显示它.
我想将此数据保存到文件中.但是,我不知道数据的格式是什么(PNG,JPG,BMP)?我认为它是JPG(因为它是来自网络的图像)但是有一种程序化的方法可以找到它吗?我查看了StackOverflow和文档,但未能找到任何内容.
TIA.
编辑:我真的需要文件扩展名吗?我将它持久化到外部存储(Amazon S3),但考虑到它总是在iOS或浏览器的上下文中使用(两者在没有扩展的情况下解释数据似乎都很好)也许这不是问题.
(这既是问题又是答案,因为需要花费大量时间才能找到真正的答案.)
症状:viewWillAppear,viewDidAppear没有被称为在我的UIViewController.
原因:嵌入一个UINavigationController或UITabBarController(我的情况)以UIViewController某种方式中断调用这些方法.
解决方案:在UIViewController包含上述UINavigationController/的手动调用它们UITabBarController.
例如(假设projectNavigationController是你的UINavigationController):
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[projectNavigationController viewWillAppear:animated];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[projectNavigationController viewWillDisappear:animated];
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[projectNavigationController viewDidAppear:animated];
}
-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[projectNavigationController viewDidDisappear:animated];
}
在我的情况下,我有一个内部UITabBarController,我相应地调用方法,所有都解决了.
(对解决方案的归因:http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/)
我已经阅读了很多,但没有找到明确的答案.
我有一个看起来像这样的课程:
public class Foo() {
private static final HashMap<String, HashMap> sharedData;
private final HashMap myRefOfInnerHashMap;
static {
// time-consuming initialization of sharedData
final HashMap<String, String> innerMap = new HashMap<String, String>;
innerMap.put...
innerMap.put...
...a
sharedData.put(someKey, java.util.Collections.unmodifiableMap(innerMap));
}
public Foo(String key) {
this.myRefOfInnerHashMap = sharedData.get(key);
}
public void doSomethingUseful() {
// iterate over copy
for (Map.Entry<String, String> entry : this.myRefOfInnerHashMap.entrySet()) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道从Foo实例访问sharedData是否是线程安全的(如构造函数和doSomethingUseful()中所示).Foo的许多实例将在多线程环境中创建.
我的意图是sharedData在静态初始化程序中初始化,之后不再修改(只读).
我读过的是不可变对象本质上是线程安全的.但我只是在实例变量的上下文中看到了这一点.不可变的静态变量是否安全?
我找到的另一个构造是ConcurrentHashMap.我可以创建ConcurrentHashMap类型的sharedData但是它包含的HashMaps也必须是ConcurrentHashMap类型的?基本上..
private static final ConcurrentHashMap<String, HashMap> sharedData;
Run Code Online (Sandbox Code Playgroud)
要么
private static final ConcurrentHashMap<String, ConcurrentHashMap> …Run Code Online (Sandbox Code Playgroud) 我正在使用Tomcat 7在Eclipse(Helios)中运行java Web应用程序.服务器成功启动(持续时间指示)但是Eclipse的进度条仍然在旋转,说Tomcat正在启动.最终达到超时并抛出错误.
我相信Tomcat很好,因为我已经使用了它使用的命令并在shell中手动运行它.Tomcat运行正常,我可以在预期的URL上点击Web应用程序.我也可以在它启动之后和超时发生之前点击它.
我重新安装了Eclipse,我用干净运行它,我删除/重新创建了服务器.没有任何效果.有人有任何线索吗?
对于我的iPhone应用程序,我正在使用RESTful服务并获取JSON.我发现库将其反序列化为NSDictionary.但是,我想知道是否有任何库将JSON/NSDictionary/Property List反序列化为我的对象(我这一个任意一个).
java等价物将是对象关系映射器,尽管我正在寻找的对象映射类型相对简单(简单的数据类型,没有复杂的关系等).
我注意到Objective-C确实有内省,所以理论上似乎有可能,但我没有找到一个库来做它.
或者是否有一种简单的方法从NSDictionary/Property List对象加载一个对象,每次对象更改时都不需要修改?
例如:
{ "id" : "user1",
"name" : "mister foobar"
"age" : 20 }
Run Code Online (Sandbox Code Playgroud)
被加载到对象中
@interface User : NSObject {
NSString *id;
NSString *name;
int *age;
}
Run Code Online (Sandbox Code Playgroud) 给定一个数组a [1,2,3,4,5,6,7,8,9,10],假设我们有一个算法可以执行以下操作:
for i in 0..a.length
for j in 0..a.length
...
Run Code Online (Sandbox Code Playgroud)
这将具有O(n ^ 2)的Big O运行时,因为对于每个元素,它将遍历整个数组.
但是如果内部循环仅从外部索引向前移动怎么办?
for i in 0..a.length
for j in i..a.length
...
Run Code Online (Sandbox Code Playgroud)
也就是说,相比之下,第一个算法将在每次迭代(外部循环)中查看n个元素.第二个算法着眼于:
在为这种算法计算Big O运行时时,它仍然是O(n ^ 2)吗?