- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想写一个不会阻塞的方法。该方法不返回任何内容。这不是通过 web 或任何东西 - 它都在运行它的设备本地。
基本上,调用方法只是想让其他对象处理一些事情。一旦它告诉它“去做这个”,调用者就想回去做自己的工作,而不是等待对象完成任务。
我不想使用 NSNotification。
编辑:我希望能够使用 iOS 3.1.2 及更高版本上可用的框架来执行此操作
编辑:感谢所有精彩的回复 - 但我不确定该选择哪个。我的要求很简单,调用方法能够将参数发送到被调用方法,并立即返回,而无需等待结果。哪个是最佳解决方案?
1 Câu trả lời
您使用以下之一:libdispatch、NSOperation、添加 NSInvocation 或“在线程上执行选择器”到运行循环、创建线程...
làm mới
这取决于你想做的事情的时间和复杂程度。如果它相当简单(例如简单的文本解析),那么只需将它添加到主运行循环中即可。如果需要更多时间(例如下载或打开文件),那么您将希望它脱离主运行循环。
创建话题
Bạn có thể sử dụngpthread
的接口(interface)来创建一个或多个线程来执行您的工作。
人们可能会选择 pthreads 以获得最佳性能和控制列表中的任何选项。关于性能:它需要您了解成本和问题。创建线程不是小事,所以最好重用它们或很好地划分任务。制作和测试并发设计也需要大量时间。
就我个人而言,我使用更具可移植性的抽象(特别是通过 pthreads)来满足我的大部分多线程需求。如果可移植性很重要,那么您可能希望使用这样的抽象层,因为在 Apple 系统之外并没有真正看到其余选项。
为了方便 objc 类型,您还可以使用类似 -[NSObject performSelectorInBackground:withObject:]
的东西。
libdispatch
(又名 GCD)
虽然我读到它不适合您,但无论如何我都会写一个简短的概述:可以比作 pthreads 上的任务/调度程序/线程池抽象层。该库通常用于并发任务。它为任务使用线程池,这些任务可能会阻塞或异步运行。相当快速和简单的抽象,并且易于使用。
NSOperation
基于任务(NSOperation)/池+调度程序(NSOperationQueue)的接口(interface),现在使用 libdispatch。这感觉比 libdispatch 更专注于任务。它先于 libdispatch,并且有一个 ObjC 接口(interface)。但是,在功能上有很多重叠。相当快速和简单的抽象,并且易于使用。
将 NSInvocation 或“在线程上执行选择器”添加到运行循环
如果您的任务很简单,您可能希望使用这种低开销的方法,即简单地告诉对象在特定线程上执行选择器或 NSInvocation。系统会将其添加到待办事项列表中(针对指定线程的运行循环)。
阅读了您的更新和评论,但不知 Prop 体问题的时间/复杂性,我建议使用 NSOperation
. pthread
非常复杂,当您需要异步执行某些操作时,您应该更倾向于使用池而不是生成线程。
关于objective-c - 如何在 objective-c 中编写非阻塞方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225861/
Tôi cần đặt văn bản vào một Div, vào một Div khác, vào một Div khác nữa. Vậy thì trông nó như thế này: #document Thay đổi mã PIN
Một điều kỳ lạ đã xảy ra. Tôi có một mã HTML cơ bản. html, đầu, thân. (Vì tôi nhận được một số phiếu bầu không tốt, đây là mã đầy đủ) Đây là CSS của tôi: html { background
Tôi đang cố gắng tải một tập hợp hình ảnh từ Assets vào ImageView có trong UICollectionview nhưng bất cứ khi nào tôi chạy ứng dụng, nó đều hiển thị lỗi. Và cũng không có hình ảnh nào được hiển thị. Tôi đang sử dụng
Tôi cần thay đổi một số biến môi trường dựa trên đầu ra của tập lệnh perl có tham số. Trong tcsh, tôi có thể sử dụng lệnh bí danh để đánh giá đầu ra của một tập lệnh perl. tcsh: bí danh setsdk 'eval `/localhome/
Tôi đã tạo một ứng dụng Blazor (phía máy chủ) mới bằng Windows Authentication và chạy nó bằng IIS Express. Nó sẽ hiển thị thông báo "Xin chào Domain\User!" ở góc trên bên phải sau Ra
Đây là phương thức void login(Event event); của tôi. Tôi muốn biết cách thực hiện điều này trong Kotlin. Câu trả lời hay nhất Trong Kotlin, toán tử đại diện là *. Nó hướng dẫn trình biên dịch rằng nó không được biết đến, nhưng một khi nó được biết đến, không có lớp nào khác
Xem mã sau cho câu chuyện trong sách nếu story.title.length < 140 - var story
Tôi đang cố gắng học cách xử lý chuỗi trong C. Tôi đã viết một chương trình lưu trữ một số bản nhạc và giúp người dùng kiểm tra xem bài hát mà họ đang nghĩ đến có tồn tại trong số các bản nhạc đã lưu trữ hay không. Điều này được thực hiện bằng cách yêu cầu người dùng nhập một chuỗi ký tự. Chương trình sau đó sử dụng strstr()
Tôi đang học sscanf và thấy một chuỗi định dạng như thế này: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); Tôi hiểu phần %[^:] có nghĩa là quét cho đến khi gặp ':' và gán nó cho a. :
def char_check(x,y): nếu (str(x) trong y hoặc x.find(y) > -1) hoặc (str(y) trong x hoặc y.find(x) > -1):
Tôi có một tình huống muốn đưa các dòng hiện có từ một tệp văn bản vào một khối mới. dòng 1 dòng 2 dòng trong khối dòng 3 dòng 4 phải trở thành dòng 1 dòng 2 dòng
Tôi có một dự án mới và đang cố gắng thiết lập thanh công cụ gỡ lỗi Django. Đầu tiên, tôi thử thiết lập nhanh, chỉ cần thêm 'debug_toolbar' vào danh sách các ứng dụng đã cài đặt. Với điều này, khi tôi đi đến URL gốc của mình, gỡ lỗi
Trong Matlab, nếu tôi có một hàm f, với chữ ký f(a,b,c), tôi có thể tạo một hàm chỉ có một biến b sẽ gọi f với a=a1 và c=c1 cố định: g = @(b) f(a1, b,
Tôi không hiểu tại sao lại có khoảng cách dọc bổ sung giữa các phần tử trong ForEach bên trong VStack để hiển thị bộ chia ngang tùy chỉnh khi sử dụng GeometryReader bên trong ScrollView. Cuộn
Tôi tự hỏi, có hướng dẫn hoặc biện pháp tốt nhất nào về thời điểm sử dụng phiên và cookie không? Những gì nên và không nên lưu trữ trong đó? Cảm ơn! Câu trả lời hay nhất Các tài liệu này cung cấp hiểu biết tốt về các vấn đề bảo mật của cookie phiên và
Tôi có một ma trận Nx3 trong scipy/numpy mà tôi muốn tạo một biểu đồ thanh 3 chiều, trong đó trục X và Y được xác định bởi các giá trị ở cột thứ nhất và thứ hai của ma trận, chiều cao của mỗi thanh là cột thứ ba trong ma trận và số thanh được xác định bởi N.
Giả sử tôi khởi tạo semaphore theo hai cách khác nhau sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) Bây giờ, sem_wait(&randomsem) trong cả hai trường hợp
Tôi đang nghi ngờ cách giá trị được lưu trữ trong "WORD" vì PStr chứa đầu ra thực tế. ? Vì Pstr lưu trữ các chữ cái viết thường thành chữ hoa, làm sao để chuyển nó thành "WORD" trong printf? Có ai vui lòng giúp tôi được không? Bạn có thể giải thích được không? #bao gồm
Tôi có một mảng 3x3: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; và muốn lấy 2 phần tử đầu tiên
Tôi nhận ra bạn có thể dễ dàng kiểm tra tiêu điểm bằng cách sử dụng lệnh sau: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(window
Tôi là một lập trình viên xuất sắc, rất giỏi!