pub struct CKOperationConfiguration { /* private fields */ }CKOperation only.Expand description
An operation configuration is a set of properties that describes how your operation should behave. All properties have a default value. When determining what properties to apply to an operation, we consult the operation’s configuration property, as well as the operation->group->defaultConfiguration property. We combine them following these rules:
Group Default Configuration Value | Operation Configuration Value | Value Applied To Operation
-----------------------------------+-------------------------------+-----------------------------------------
default value | default value | default value
default value | explicit value | operation.configuration explicit value
explicit value | default value | operation.group.defaultConfiguration explicit value
explicit value | explicit value | operation.configuration explicit valueFor example: CKOperationGroup -> defaultConfiguration -> allowsCellularAccess explicitly set to NO
- CKOperation -> configuration -> allowsCellularAccess has default value of YES = disallow cellular access
CKOperationGroup -> defaultConfiguration -> allowsCellularAccess explicitly set to NO
- CKOperation -> configuration -> allowsCellularAccess explicitly set to YES = allow cellular access
See also Apple’s documentation
Implementations§
Source§impl CKOperationConfiguration
impl CKOperationConfiguration
Sourcepub unsafe fn container(&self) -> Option<Retained<CKContainer>>
Available on crate feature CKContainer only.
pub unsafe fn container(&self) -> Option<Retained<CKContainer>>
CKContainer only.If no container is set, [CKContainer defaultContainer] is used
Sourcepub unsafe fn setContainer(&self, container: Option<&CKContainer>)
Available on crate feature CKContainer only.
pub unsafe fn setContainer(&self, container: Option<&CKContainer>)
CKContainer only.Setter for container.
Sourcepub unsafe fn qualityOfService(&self) -> NSQualityOfService
pub unsafe fn qualityOfService(&self) -> NSQualityOfService
CKOperations behave differently depending on how you set qualityOfService.
Quality of Service | timeoutIntervalForResource | Network Error Behavior | Discretionary Behavior
-------------------+----------------------------+------------------------+-----------------------
UserInteractive | -1 (no enforcement) | fail | nonDiscretionary
UserInitiated | -1 (no enforcement) | fail | nonDiscretionary
Default | 1 week | fail | discretionary when app backgrounded
Utility | 1 week | internally retried | discretionary when app backgrounded
Background | 1 week | internally retried | discretionarytimeoutIntervalForResource
- the timeout interval for any network resources retrieved by this operation
- this can be overridden via CKOperationConfiguration’s timeoutIntervalForResource property
Network Error Behavior
- when a network request in service of a CKOperation fails due to a networking error, the operation may fail with that error, or internally retry the network request. Only a subset of networking errors are retried, and limiting factors such as timeoutIntervalForResource are still applicable.
Discretionary Behavior
- network requests in service of a CKOperation may be marked as discretionary
- discretionary network requests are scheduled at the description of the system for optimal performance
CKOperations have a default qualityOfService of Default.
Sourcepub unsafe fn setQualityOfService(&self, quality_of_service: NSQualityOfService)
pub unsafe fn setQualityOfService(&self, quality_of_service: NSQualityOfService)
Setter for qualityOfService.
Sourcepub unsafe fn allowsCellularAccess(&self) -> bool
pub unsafe fn allowsCellularAccess(&self) -> bool
Defaults to
YES
Sourcepub unsafe fn setAllowsCellularAccess(&self, allows_cellular_access: bool)
pub unsafe fn setAllowsCellularAccess(&self, allows_cellular_access: bool)
Setter for allowsCellularAccess.
Sourcepub unsafe fn isLongLived(&self) -> bool
pub unsafe fn isLongLived(&self) -> bool
Long lived operations will continue running even if your process exits. If your process remains alive for the lifetime of the long lived operation its behavior is the same as a regular operation.
Long lived operations can be fetched and replayed from the container via the
fetchAllLongLivedOperations:and
fetchLongLivedOperationsWithIDs:APIs. Your code should only fetch and re-enqueue long lived operations on app launch.
Long lived operations persist until their -[NSOperation completionBlock] returns or until the operation is cancelled. Long lived operations may be garbage collected 24 hours after they finish running if no client has replayed them.
The default value for longLived is NO. Changing the value of longLived on an already started operation or on an outstanding long lived operation fetched from CKContainer has no effect.
Sourcepub unsafe fn setLongLived(&self, long_lived: bool)
pub unsafe fn setLongLived(&self, long_lived: bool)
Setter for isLongLived.
Sourcepub unsafe fn timeoutIntervalForRequest(&self) -> NSTimeInterval
pub unsafe fn timeoutIntervalForRequest(&self) -> NSTimeInterval
If non-zero, overrides the timeout interval for any network requests issued by this operation. The default value is 60.
See: NSURLSessionConfiguration.timeoutIntervalForRequest
Sourcepub unsafe fn setTimeoutIntervalForRequest(
&self,
timeout_interval_for_request: NSTimeInterval,
)
pub unsafe fn setTimeoutIntervalForRequest( &self, timeout_interval_for_request: NSTimeInterval, )
Setter for timeoutIntervalForRequest.
Sourcepub unsafe fn timeoutIntervalForResource(&self) -> NSTimeInterval
pub unsafe fn timeoutIntervalForResource(&self) -> NSTimeInterval
If set, overrides the timeout interval for any network resources retrieved by this operation.
If not explicitly set, defaults to a value based on the operation’s
qualityOfService
See: NSURLSessionConfiguration.timeoutIntervalForResource
Sourcepub unsafe fn setTimeoutIntervalForResource(
&self,
timeout_interval_for_resource: NSTimeInterval,
)
pub unsafe fn setTimeoutIntervalForResource( &self, timeout_interval_for_resource: NSTimeInterval, )
Setter for timeoutIntervalForResource.
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init/new methods).
§Example
Check that an instance of NSObject has the precise class NSObject.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load instead.Use Ivar::load instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T.
See Ivar::load_ptr for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T.
This is the reference-variant. Use Retained::downcast if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString to a NSMutableString,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass: for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject.
§Panics
This works internally by calling isKindOfClass:. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject and
NSProxy implement this method.
§Examples
Cast an NSString back and forth from NSObject.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();Try (and fail) to cast an NSObject to an NSString.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}Trait Implementations§
Source§impl AsRef<AnyObject> for CKOperationConfiguration
impl AsRef<AnyObject> for CKOperationConfiguration
Source§impl AsRef<NSObject> for CKOperationConfiguration
impl AsRef<NSObject> for CKOperationConfiguration
Source§impl Borrow<AnyObject> for CKOperationConfiguration
impl Borrow<AnyObject> for CKOperationConfiguration
Source§impl Borrow<NSObject> for CKOperationConfiguration
impl Borrow<NSObject> for CKOperationConfiguration
Source§impl ClassType for CKOperationConfiguration
impl ClassType for CKOperationConfiguration
Source§const NAME: &'static str = "CKOperationConfiguration"
const NAME: &'static str = "CKOperationConfiguration"
Source§type ThreadKind = <<CKOperationConfiguration as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<CKOperationConfiguration as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for CKOperationConfiguration
impl Debug for CKOperationConfiguration
Source§impl Deref for CKOperationConfiguration
impl Deref for CKOperationConfiguration
Source§impl Hash for CKOperationConfiguration
impl Hash for CKOperationConfiguration
Source§impl Message for CKOperationConfiguration
impl Message for CKOperationConfiguration
Source§impl NSObjectProtocol for CKOperationConfiguration
impl NSObjectProtocol for CKOperationConfiguration
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref