gpt4 book ai didi

objective-c - 在性能方面重构常见的 HTTP 请求代码是否值得?

转载 作者:行者123 更新时间:2023-12-01 18:26:21 26 4
gpt4 key购买 nike

我一直在开发一个 iPhone 应用程序,由一位经验丰富的开发人员提供。我只是一个学徒程序员,还在为实际的 Objective-C/iOS 应用程序开发而苦苦挣扎(我自己学习了 Java 和 PHP,但 Objective-c 对我来说完全不是这些)。

我们的应用程序只是另一个“以网络为中心”(我什至不知道这个词是否合适......)应用程序,它严重依赖服务器端操作,每次都会发出频繁的 http post 请求(例如跟踪用户位置,向其他用户发送消息等)。

当我被分配开发这个应用程序时,我在代码中看到,每个 http 请求都写在每个方法中。每个请求都是通过调度另一个线程来完成的,并且每个 Action 都是为这些请求的响应而相应地编写的。

例如。

-(void) methodA {  
// Making http request headers...

// Dispatch another thread
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0);
dispatch_async(queue, ^{
// Send synchronous request and handle the response...
});

}

-(void) methodB {
// Making http request headers...

// Dispatch another thread
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0);
dispatch_async(queue, ^{
// Send synchronous request and handle the response...
});

}

当应用程序需要向服务器发送请求时,上面的代码无处不在。

我想知道,为什么他没有创建一个处理 http 请求的类。
在 Java 中,您可以创建一个向服务器发出同步请求的类:
public class ClassHttpRequest {
public int makePost {
// Send synchronous request and return result...
}
}

然后创建这个类的一个实例并在线程内执行它的实例方法(在本例中为 makePost):
public class methodA {  

Thread t = new Thread(new Runnable() {
public void run() {
public ClassHttpRequest requestHandler = new ClassHttpRequest();
if (success == requestHandler.makePost()) {
// Handle response...
}
}
}
});

t.start();
}

在 Objective-C 中创建一个类并让它处理频繁的 http 请求是否有任何性能损失或问题?或者,它只是根本不“推荐”之类的?我听说,在 Objective-C 中,使用 try-catch 语句进行异常处理并不常见,因为它会消耗大量资源。我确实读过几本 iOS 和 Objective-C 的书籍(并在 google 上搜索过),但是对于真正的应用程序开发来说,这种“实用”的答案很难找到,大多数时候它会让像我这样的初学者感到困惑。

我应该问他为什么不创建这样的类(class),但他现在不在,我无法联系到他。另外,我相信 stackoverflow 的专业人士可以为我提供比我的前任更准确和简洁的解决方案。 (我已经问了几个问题,并且已经得到了我想知道的内容。)

提前致谢。

最佳答案

面向对象设计的常规规则适用:如果将 HTTP 请求表示为有形对象是有意义的——特别是,有一堆样板代码是必要的,否则会被复制粘贴——那么使用它可能是个好主意一类。否则,没有必要。尽管在这种特定情况下,您是否有理由不只是使用标准的异步系统 API - NSURLRequest、NSURLConnection、NSURLDownload 等?

@try/@catch 根据定义用于异常处理,应根据需要使用。如果您忽略它们,您的代码可能会以不必要的有趣方式失败(例如,让锁悬空)或不必要的程度(例如,完全崩溃而不是简单地失败特定操作)。您不应该将它们用于流控制——与其他语言不同,Objective-C 异常适用于程序员错误、“不可能”条件和其他此类事件。不幸的是,很多现有的 Objective-C 代码都不是异常安全的,所以当你应该使用它们时,你不应该依赖它们。

它们在您现在可能使用的任何运行时中都不是特别昂贵 - @try 非常便宜,几乎是免费的。只有在抛出异常时才会完成任何重要的工作,并且由于您应该只在非常糟糕的情况下看到它们 - 即不经常 - 性能成本是无关紧要的。

关于objective-c - 在性能方面重构常见的 HTTP 请求代码是否值得?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13428781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com