CIContext

Struct CIContext 

Source
pub struct CIContext { /* private fields */ }
Available on crate feature CIContext only.
Expand description

The Core Image context class provides an evaluation context for Core Image processing with Metal, OpenGL, or OpenCL.

You use a CIContext instance to render a CIImage instance which represents a graph of image processing operations which are built using other Core Image classes, such as CIFilter-class, CIKernel, CIColor and CIImage. You can also use a CIContext with the CIDetector class to analyze images — for example, to detect faces or barcodes.

Contexts support automatic color management by performing all processing operations in a working color space. This means that unless told otherwise:

  • All input images are color matched from the input’s color space to the working space.
  • All renders are color matched from the working space to the destination space. (For more information on CGColorSpace see <doc ://com.apple.documentation/documentation/coregraphics/cgcolorspace>)

CIContext and CIImage instances are immutable, so multiple threads can use the same CIContext instance to render CIImage instances. However, CIFilter-class instances are mutable and thus cannot be shared safely among threads. Each thread must take case not to access or modify a CIFilter-class instance while it is being used by another thread.

The CIContext manages various internal state such as MTLCommandQueue and caches for compiled kernels and intermediate buffers. For this reason it is not recommended to create many CIContext instances. As a rule, it recommended that you create one CIContext instance for each view that renders CIImage or each background task.

See also Apple’s documentation

Implementations§

Source§

impl CIContext

Source

pub unsafe fn contextWithCGLContext_pixelFormat_colorSpace_options( cglctx: CGLContextObj, pixel_format: CGLPixelFormatObj, color_space: Option<&CGColorSpace>, options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<CIContext>

👎Deprecated: Core Image OpenGL API deprecated. (Define CI_SILENCE_GL_DEPRECATION to silence these warnings)
Available on crate feature objc2-core-graphics and crate feature objc2-open-gl and macOS only.
§Safety
  • cglctx must be a valid pointer.
  • pixel_format must be a valid pointer or null.
  • options generic should be of the correct type.
Source

pub unsafe fn contextWithCGLContext_pixelFormat_options( cglctx: CGLContextObj, pixel_format: CGLPixelFormatObj, options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<CIContext>

👎Deprecated: Core Image OpenGL API deprecated. (Define CI_SILENCE_GL_DEPRECATION to silence these warnings)
Available on crate feature objc2-open-gl and macOS only.
§Safety
  • cglctx must be a valid pointer.
  • pixel_format must be a valid pointer or null.
  • options generic should be of the correct type.
Source

pub unsafe fn contextWithCGContext_options( cgctx: &CGContext, options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<CIContext>

Available on crate feature objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn contextWithOptions( options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<CIContext>

§Safety

options generic should be of the correct type.

Source

pub unsafe fn context() -> Retained<CIContext>

Source

pub unsafe fn initWithOptions( this: Allocated<Self>, options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<Self>

§Safety

options generic should be of the correct type.

Source

pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>

Source

pub unsafe fn contextWithMTLDevice( device: &ProtocolObject<dyn MTLDevice>, ) -> Retained<CIContext>

Available on crate feature objc2-metal only.
Source

pub unsafe fn contextWithMTLDevice_options( device: &ProtocolObject<dyn MTLDevice>, options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<CIContext>

Available on crate feature objc2-metal only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn contextWithMTLCommandQueue( command_queue: &ProtocolObject<dyn MTLCommandQueue>, ) -> Retained<CIContext>

Available on crate feature objc2-metal only.
Source

pub unsafe fn contextWithMTLCommandQueue_options( command_queue: &ProtocolObject<dyn MTLCommandQueue>, options: Option<&NSDictionary<CIContextOption, AnyObject>>, ) -> Retained<CIContext>

Available on crate feature objc2-metal only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn workingColorSpace(&self) -> Option<Retained<CGColorSpace>>

Available on crate feature objc2-core-graphics only.

The working color space of the CIContext.

The working color space determines the color space used when executing filter kernels. You specify a working color space using the kCIContextWorkingColorSpace option when creating a CIContext.

  • All input images are color matched from the input’s color space to the working space.
  • All renders are color matched from the working space to the destination space.

The property will be null if the context was created with color management disabled.

This property is not atomic.

§Safety

This might not be thread-safe.

Source

pub unsafe fn workingFormat(&self) -> CIFormat

Available on crate feature CIImage only.

The working pixel format that the CIContext uses for intermediate buffers.

The working format determines the pixel format that Core Image uses to create intermediate buffers for rendering images. You specify a working pixel format using the kCIContextWorkingFormat option when creating a CIContext.

This property is not atomic.

§Safety

This might not be thread-safe.

Source

pub unsafe fn drawImage_atPoint_fromRect( &self, image: &CIImage, at_point: CGPoint, from_rect: CGRect, )

👎Deprecated
Available on crate features CIImage and objc2-core-foundation only.
Source

pub unsafe fn drawImage_inRect_fromRect( &self, image: &CIImage, in_rect: CGRect, from_rect: CGRect, )

Available on crate features CIImage and objc2-core-foundation only.
Source

pub unsafe fn createCGLayerWithSize_info( &self, size: CGSize, info: Option<&CFDictionary>, ) -> Option<Retained<CGLayer>>

👎Deprecated
Available on crate features objc2-core-foundation and objc2-core-graphics only.
§Safety

info generics must be of the correct type.

Source

pub unsafe fn render_toBitmap_rowBytes_bounds_format_colorSpace( &self, image: &CIImage, data: NonNull<c_void>, row_bytes: isize, bounds: CGRect, format: CIFormat, color_space: Option<&CGColorSpace>, )

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics only.
§Safety

data must be a valid pointer.

Source

pub unsafe fn render_toIOSurface_bounds_colorSpace( &self, image: &CIImage, surface: &IOSurfaceRef, bounds: CGRect, color_space: Option<&CGColorSpace>, )

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics and objc2-io-surface only.
Source

pub unsafe fn render_toCVPixelBuffer( &self, image: &CIImage, buffer: &CVPixelBuffer, )

Available on crate features CIImage and objc2-core-video only.
Source

pub unsafe fn render_toCVPixelBuffer_bounds_colorSpace( &self, image: &CIImage, buffer: &CVPixelBuffer, bounds: CGRect, color_space: Option<&CGColorSpace>, )

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics and objc2-core-video only.
Source

pub unsafe fn render_toMTLTexture_commandBuffer_bounds_colorSpace( &self, image: &CIImage, texture: &ProtocolObject<dyn MTLTexture>, command_buffer: Option<&ProtocolObject<dyn MTLCommandBuffer>>, bounds: CGRect, color_space: &CGColorSpace, )

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics and objc2-metal only.
§Safety
  • texture may need to be synchronized.
  • texture may be unretained, you must ensure it is kept alive while in use.
Source

pub unsafe fn reclaimResources(&self)

Source

pub unsafe fn clearCaches(&self)

Source

pub unsafe fn inputImageMaximumSize(&self) -> CGSize

Available on crate feature objc2-core-foundation only.
Source

pub unsafe fn outputImageMaximumSize(&self) -> CGSize

Available on crate feature objc2-core-foundation only.
Source§

impl CIContext

Methods declared on superclass NSObject.

Source

pub unsafe fn new() -> Retained<Self>

Source§

impl CIContext

createCGImage.

Source

pub unsafe fn createCGImage_fromRect( &self, image: &CIImage, from_rect: CGRect, ) -> Option<Retained<CGImage>>

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics only.

Creates a Core Graphics image from a region of a Core Image image instance.

The color space of the created CGImage will be sRGB unless the receiving CIContext was created with a kCIContextOutputColorSpace option.

Normally the pixel format of the created CGImage will be 8 bits-per-component. It will be 16 bits-per-component float if the above color space is HDR.

  • Parameters:

  • image: A CIImage image instance for which to create a CGImage.

  • fromRect: The CGRect region of the image to use. This region relative to the cartesean coordinate system of image. This region will be intersected with integralized and intersected with image.extent.

  • Returns: Returns a new CGImage instance. You are responsible for releasing the returned image when you no longer need it. The returned value will be null if the extent is empty or too big.

Source

pub unsafe fn createCGImage_fromRect_format_colorSpace( &self, image: &CIImage, from_rect: CGRect, format: CIFormat, color_space: Option<&CGColorSpace>, ) -> Option<Retained<CGImage>>

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics only.

Creates a Core Graphics image from a region of a Core Image image instance with an option for controlling the pixel format and color space of the CGImage.

  • Parameters:

  • image: A CIImage image instance for which to create a CGImage.

  • fromRect: The CGRect region of the image to use. This region relative to the cartesean coordinate system of image. This region will be intersected with integralized and intersected with image.extent.

  • format: A CIFormat to specify the pixel format of the created CGImage. For example, if kCIFormatRGBX16 is specified, then the created CGImage will be 16 bits-per-component and opaque.

  • colorSpace: The CGColorSpace for the output image. This color space must have either CGColorSpaceModel.rgb or CGColorSpaceModel.monochrome and be compatible with the specified pixel format.

  • Returns: Returns a new CGImage instance. You are responsible for releasing the returned image when you no longer need it. The returned value will be null if the extent is empty or too big.

Source

pub unsafe fn createCGImage_fromRect_format_colorSpace_deferred( &self, image: &CIImage, from_rect: CGRect, format: CIFormat, color_space: Option<&CGColorSpace>, deferred: bool, ) -> Option<Retained<CGImage>>

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics only.

Creates a Core Graphics image from a region of a Core Image image instance with an option for controlling when the image is rendered.

  • Parameters:
  • image: A CIImage image instance for which to create a CGImage.
  • fromRect: The CGRect region of the image to use. This region relative to the cartesean coordinate system of image. This region will be intersected with integralized and intersected with image.extent.
  • format: A CIFormat to specify the pixel format of the created CGImage. For example, if kCIFormatRGBX16 is specified, then the created CGImage will be 16 bits-per-component and opaque.
  • colorSpace: The CGColorSpace for the output image. This color space must have either CGColorSpaceModel.rgb or CGColorSpaceModel.monochrome and be compatible with the specified pixel format.
  • deferred: Controls when Core Image renders image.
  • True: rendering of image is deferred until the created CGImage rendered.
  • False: the image is rendered immediately.
  • Returns: Returns a new CGImage instance. You are responsible for releasing the returned image when you no longer need it. The returned value will be null if the extent is empty or too big.
Source

pub unsafe fn createCGImage_fromRect_format_colorSpace_deferred_calculateHDRStats( &self, image: &CIImage, from_rect: CGRect, format: CIFormat, color_space: Option<&CGColorSpace>, deferred: bool, calculate_hdr_stats: bool, ) -> Option<Retained<CGImage>>

Available on crate features CIImage and objc2-core-foundation and objc2-core-graphics only.

Creates a Core Graphics image from a region of a Core Image image instance with an option for calculating HDR statistics.

  • Parameters:
  • image: A CIImage image instance for which to create a CGImage.
  • fromRect: The CGRect region of the image to use. This region relative to the cartesean coordinate system of image. This region will be intersected with integralized and intersected with image.extent.
  • format: A CIFormat to specify the pixel format of the created CGImage. For example, if kCIFormatRGBX16 is specified, then the created CGImage will be 16 bits-per-component and opaque.
  • colorSpace: The CGColorSpace for the output image. This color space must have either CGColorSpaceModel.rgb or CGColorSpaceModel.monochrome and be compatible with the specified pixel format.
  • deferred: Controls when Core Image renders image.
  • True: rendering of image is deferred until the created CGImage rendered.
  • False: the image is rendered immediately.
  • calculateHDRStats: Controls if Core Image calculates HDR statistics.
  • True: Core Image will immediately render image, calculate the HDR statistics and create a CGImage that has the calculated values.
  • False: the created CGImage will not have any HDR statistics.
  • Returns: Returns a new CGImage instance. You are responsible for releasing the returned image when you no longer need it. The returned value will be null if the extent is empty or too big.
Source§

impl CIContext

CalculateHDRStats.

Source

pub unsafe fn calculateHDRStatsForIOSurface(&self, surface: &IOSurfaceRef)

Available on crate feature objc2-io-surface only.

Given an IOSurface, use the receiving Core Image context to calculate its HDR statistics (content headroom and content average light level) and then update the surface’s attachments to store the values.

If the IOSurface has a Clean Aperture rectangle then only pixels within that rectangle are considered.

  • Parameters:
  • surface: A mutable IOSurfaceRef for which to calculate and attach statistics.
Source

pub unsafe fn calculateHDRStatsForCVPixelBuffer(&self, buffer: &CVPixelBuffer)

Available on crate feature objc2-core-video only.

Given a CVPixelBuffer, use the receiving Core Image context to calculate its HDR statistics (content headroom and content average light level) and then update the buffers’s attachments to store the values.

If the CVPixelBuffer has a Clean Aperture rectangle then only pixels within that rectangle are considered.

  • Parameters:
  • buffer: A mutable CVPixelBuffer for which to calculate and attach statistics.
Source

pub unsafe fn calculateHDRStatsForCGImage( &self, cgimage: &CGImage, ) -> Retained<CGImage>

Available on crate feature objc2-core-graphics only.

Given a Core Graphics image, use the receiving Core Image context to calculate its HDR statistics (content headroom and content average light level) and then return a new Core Graphics image that has the calculated values.

  • Parameters:
  • cgimage: An immutable CGImage for which to calculate statistics.
  • Returns: Returns a new CGImage instance that has the calculated statistics attached.
Source

pub unsafe fn calculateHDRStatsForImage( &self, image: &CIImage, ) -> Option<Retained<CIImage>>

Available on crate feature CIImage only.

Given a Core Image image, use the receiving Core Image context to calculate its HDR statistics (content headroom and content average light level) and then return a new Core Image image that has the calculated values.

If the image extent is not finite, then nil will be returned.

  • Parameters:
  • image: An immutable CIImage for which to calculate statistics.
  • Returns: Returns a new CIImage instance that has the calculated statistics attached.
Source§

impl CIContext

OfflineGPUSupport.

Source

pub unsafe fn offlineGPUCount() -> c_uint

Source

pub unsafe fn contextForOfflineGPUAtIndex( index: c_uint, ) -> Option<Retained<CIContext>>

👎Deprecated: Core Image OpenGL API deprecated. (Define CI_SILENCE_GL_DEPRECATION to silence these warnings)
Source

pub unsafe fn contextForOfflineGPUAtIndex_colorSpace_options_sharedContext( index: c_uint, color_space: Option<&CGColorSpace>, options: Option<&NSDictionary<CIContextOption, AnyObject>>, shared_context: CGLContextObj, ) -> Option<Retained<CIContext>>

👎Deprecated: Core Image OpenGL API deprecated. (Define CI_SILENCE_GL_DEPRECATION to silence these warnings)
Available on crate feature objc2-core-graphics and crate feature objc2-open-gl and macOS only.
§Safety
  • options generic should be of the correct type.
  • shared_context must be a valid pointer or null.
Source§

impl CIContext

ImageRepresentation.

Source

pub unsafe fn TIFFRepresentationOfImage_format_colorSpace_options( &self, image: &CIImage, format: CIFormat, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Option<Retained<NSData>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn JPEGRepresentationOfImage_colorSpace_options( &self, image: &CIImage, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Option<Retained<NSData>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn HEIFRepresentationOfImage_format_colorSpace_options( &self, image: &CIImage, format: CIFormat, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Option<Retained<NSData>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn HEIF10RepresentationOfImage_colorSpace_options_error( &self, image: &CIImage, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<Retained<NSData>, Retained<NSError>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn PNGRepresentationOfImage_format_colorSpace_options( &self, image: &CIImage, format: CIFormat, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Option<Retained<NSData>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn OpenEXRRepresentationOfImage_options_error( &self, image: &CIImage, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<Retained<NSData>, Retained<NSError>>

Available on crate feature CIImage only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn writeTIFFRepresentationOfImage_toURL_format_colorSpace_options_error( &self, image: &CIImage, url: &NSURL, format: CIFormat, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<(), Retained<NSError>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn writePNGRepresentationOfImage_toURL_format_colorSpace_options_error( &self, image: &CIImage, url: &NSURL, format: CIFormat, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<(), Retained<NSError>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn writeJPEGRepresentationOfImage_toURL_colorSpace_options_error( &self, image: &CIImage, url: &NSURL, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<(), Retained<NSError>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn writeHEIFRepresentationOfImage_toURL_format_colorSpace_options_error( &self, image: &CIImage, url: &NSURL, format: CIFormat, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<(), Retained<NSError>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn writeHEIF10RepresentationOfImage_toURL_colorSpace_options_error( &self, image: &CIImage, url: &NSURL, color_space: &CGColorSpace, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<(), Retained<NSError>>

Available on crate features CIImage and objc2-core-graphics only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn writeOpenEXRRepresentationOfImage_toURL_options_error( &self, image: &CIImage, url: &NSURL, options: &NSDictionary<CIImageRepresentationOption, AnyObject>, ) -> Result<(), Retained<NSError>>

Available on crate feature CIImage only.
§Safety

options generic should be of the correct type.

Source§

impl CIContext

CIDepthBlurEffect.

Source

pub unsafe fn depthBlurEffectFilterForImageURL_options( &self, url: &NSURL, options: Option<&NSDictionary>, ) -> Option<Retained<CIFilter>>

Available on crate feature CIFilter only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn depthBlurEffectFilterForImageData_options( &self, data: &NSData, options: Option<&NSDictionary>, ) -> Option<Retained<CIFilter>>

Available on crate feature CIFilter only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn depthBlurEffectFilterForImage_disparityImage_portraitEffectsMatte_orientation_options( &self, image: &CIImage, disparity_image: &CIImage, portrait_effects_matte: Option<&CIImage>, orientation: CGImagePropertyOrientation, options: Option<&NSDictionary>, ) -> Option<Retained<CIFilter>>

Available on crate features CIFilter and CIImage and objc2-image-io only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn depthBlurEffectFilterForImage_disparityImage_portraitEffectsMatte_hairSemanticSegmentation_orientation_options( &self, image: &CIImage, disparity_image: &CIImage, portrait_effects_matte: Option<&CIImage>, hair_semantic_segmentation: Option<&CIImage>, orientation: CGImagePropertyOrientation, options: Option<&NSDictionary>, ) -> Option<Retained<CIFilter>>

Available on crate features CIFilter and CIImage and objc2-image-io only.
§Safety

options generic should be of the correct type.

Source

pub unsafe fn depthBlurEffectFilterForImage_disparityImage_portraitEffectsMatte_hairSemanticSegmentation_glassesMatte_gainMap_orientation_options( &self, image: &CIImage, disparity_image: &CIImage, portrait_effects_matte: Option<&CIImage>, hair_semantic_segmentation: Option<&CIImage>, glasses_matte: Option<&CIImage>, gain_map: Option<&CIImage>, orientation: CGImagePropertyOrientation, options: Option<&NSDictionary>, ) -> Option<Retained<CIFilter>>

Available on crate features CIFilter and CIImage and objc2-image-io only.
§Safety

options generic should be of the correct type.

Source§

impl CIContext

CIRenderDestination.

Source

pub unsafe fn startTaskToRender_fromRect_toDestination_atPoint_error( &self, image: &CIImage, from_rect: CGRect, destination: &CIRenderDestination, at_point: CGPoint, ) -> Result<Retained<CIRenderTask>, Retained<NSError>>

Available on crate features CIRenderDestination and CIImage and objc2-core-foundation only.
Source

pub unsafe fn startTaskToRender_toDestination_error( &self, image: &CIImage, destination: &CIRenderDestination, ) -> Result<Retained<CIRenderTask>, Retained<NSError>>

Available on crate features CIRenderDestination and CIImage only.
Source

pub unsafe fn prepareRender_fromRect_toDestination_atPoint_error( &self, image: &CIImage, from_rect: CGRect, destination: &CIRenderDestination, at_point: CGPoint, ) -> Result<(), Retained<NSError>>

Available on crate features CIRenderDestination and CIImage and objc2-core-foundation only.
Source

pub unsafe fn startTaskToClear_error( &self, destination: &CIRenderDestination, ) -> Result<Retained<CIRenderTask>, Retained<NSError>>

Available on crate feature CIRenderDestination only.

Methods from Deref<Target = NSObject>§

Source

pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !

Handle messages the object doesn’t recognize.

See Apple’s documentation for details.

Methods from Deref<Target = AnyObject>§

Source

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());
Source

pub unsafe fn get_ivar<T>(&self, name: &str) -> &T
where T: Encode,

👎Deprecated: this is difficult to use correctly, use 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.

Source

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 CIContext

Source§

fn as_ref(&self) -> &AnyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<CIContext> for CIContext

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<NSObject> for CIContext

Source§

fn as_ref(&self) -> &NSObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Borrow<AnyObject> for CIContext

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for CIContext

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for CIContext

Source§

const NAME: &'static str = "CIContext"

The name of the Objective-C class that this type represents. Read more
Source§

type Super = NSObject

The superclass of this class. Read more
Source§

type ThreadKind = <<CIContext as ClassType>::Super as ClassType>::ThreadKind

Whether the type can be used from any thread, or from only the main thread. Read more
Source§

fn class() -> &'static AnyClass

Get a reference to the Objective-C class that this type represents. Read more
Source§

fn as_super(&self) -> &Self::Super

Get an immutable reference to the superclass.
Source§

impl Debug for CIContext

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for CIContext

Source§

type Target = NSObject

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for CIContext

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for CIContext

Source§

fn retain(&self) -> Retained<Self>
where Self: Sized,

Increment the reference count of the receiver. Read more
Source§

impl NSObjectProtocol for CIContext

Source§

fn isEqual(&self, other: Option<&AnyObject>) -> bool
where Self: Sized + Message,

Check whether the object is equal to an arbitrary other object. Read more
Source§

fn hash(&self) -> usize
where Self: Sized + Message,

An integer that can be used as a table address in a hash table structure. Read more
Source§

fn isKindOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of the class, or one of its subclasses. Read more
Source§

fn is_kind_of<T>(&self) -> bool
where T: ClassType, Self: Sized + Message,

👎Deprecated: use isKindOfClass directly, or cast your objects with AnyObject::downcast_ref
Check if the object is an instance of the class type, or one of its subclasses. Read more
Source§

fn isMemberOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of a specific class, without checking subclasses. Read more
Source§

fn respondsToSelector(&self, aSelector: Sel) -> bool
where Self: Sized + Message,

Check whether the object implements or inherits a method with the given selector. Read more
Source§

fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
where Self: Sized + Message,

Check whether the object conforms to a given protocol. Read more
Source§

fn description(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object. Read more
Source§

fn debugDescription(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object to use when debugging. Read more
Source§

fn isProxy(&self) -> bool
where Self: Sized + Message,

Check whether the receiver is a subclass of the NSProxy root class instead of the usual NSObject. Read more
Source§

fn retainCount(&self) -> usize
where Self: Sized + Message,

The reference count of the object. Read more
Source§

impl PartialEq for CIContext

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefEncode for CIContext

Source§

const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF

The Objective-C type-encoding for a reference of this type. Read more
Source§

impl DowncastTarget for CIContext

Source§

impl Eq for CIContext

Source§

impl Send for CIContext

Source§

impl Sync for CIContext

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T> AnyThread for T
where T: ClassType<ThreadKind = dyn AnyThread + 'a> + ?Sized,

Source§

fn alloc() -> Allocated<Self>
where Self: Sized + ClassType,

Allocate a new instance of the class. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,