{"abstract":[{"text":"A range of frequencies your app allows for frame updates, affecting how often the system invokes your delegate’s callback.","type":"text"}],"hierarchy":{"paths":[["doc:\/\/com.apple.documentation\/documentation\/technologies","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameRateRange"},"kind":"symbol","legalNotices":{"copyright":"Copyright &copy; 2026 Apple Inc. All rights reserved.","privacyPolicy":"https:\/\/www.apple.com\/privacy\/privacy-policy","termsOfUse":"https:\/\/www.apple.com\/legal\/internet-services\/terms\/site.html"},"metadata":{"availableLanguages":["de-DE","en-US","es-419","fr-FR","it-IT","ja-JP","ko-KR","pt-BR","zh-CN"],"externalID":"c:objc(cs)CAMetalDisplayLink(py)preferredFrameRateRange","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameRateRange"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:@S@CAFrameRateRange","text":"CAFrameRateRange"}],"modules":[{"name":"Core Animation"}],"navigatorTitle":[{"kind":"identifier","text":"preferredFrameRateRange"}],"platforms":[{"introducedAt":"17.0","name":"iOS"},{"introducedAt":"17.0","name":"iPadOS"},{"introducedAt":"17.0","name":"Mac Catalyst"},{"introducedAt":"14.0","name":"macOS"},{"introducedAt":"17.0","name":"tvOS"},{"introducedAt":"1.0","name":"visionOS"}],"role":"symbol","roleHeading":"Instance Property","symbolKind":"property","title":"preferredFrameRateRange"},"primaryContentSections":[{"declarations":[{"languages":["swift"],"platforms":["iOS","iPadOS","Mac Catalyst","macOS","tvOS","visionOS"],"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameRateRange"},{"kind":"text","text":": "},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAFrameRateRange","kind":"typeIdentifier","preciseIdentifier":"c:@S@CAFrameRateRange","text":"CAFrameRateRange"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}]}],"kind":"declarations"},{"content":[{"anchor":"Discussion","level":2,"text":"Discussion","type":"heading"},{"inlineContent":[{"text":"The display link makes a best attempt to invoke your app’s callback within the frequency range you set to this property. However, the system also takes into account the device’s hardware capabilities and the other tasks your game or app is running.","type":"text"}],"type":"paragraph"},{"content":[{"inlineContent":[{"text":"","type":"text"},{"text":" ","type":"text"},{"text":"Choose a frame rate range that your app can consistently maintain.","type":"text"}],"type":"paragraph"}],"name":"Important","style":"important","type":"aside"},{"inlineContent":[{"text":"The system can change the available range of frame rates because it factors in system policies and a person’s preferences. For example, Low Power Mode, critical thermal state, and accessibility settings can affect the system’s frame rate.","type":"text"}],"type":"paragraph"},{"inlineContent":[{"text":"The system typically provides a consistent frame rate by choosing one that’s a factor of the display’s maximum refresh rate. For example, a display link could invoke your callback 60 times per second for a display with a refresh rate of 60 hertz. However, the display link could invoke your callback less frequently, such as 30, 20, or 15 hertz, by setting a range with smaller values.","type":"text"}],"type":"paragraph"},{"content":[{"inlineContent":[{"text":"","type":"text"},{"text":" ","type":"text"},{"text":"By default, this property’s values are equal to ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAFrameRateRange\/default","isActive":true,"type":"reference"},{"text":", which is equivalent to the display’s maximum refresh rate, such as a ","type":"text"},{"identifier":"doc:\/\/com.apple.documentation\/documentation\/UIKit\/UIScreen","isActive":true,"type":"reference"},{"text":" instance’s ","type":"text"},{"identifier":"doc:\/\/com.apple.documentation\/documentation\/UIKit\/UIScreen\/maximumFramesPerSecond","isActive":true,"type":"reference"},{"text":" property.","type":"text"}],"type":"paragraph"}],"name":"Note","style":"note","type":"aside"},{"inlineContent":[{"text":"For more information, see ","type":"text"},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/optimizing-iphone-and-ipad-apps-to-support-promotion-displays","isActive":true,"type":"reference"},{"text":".","type":"text"}],"type":"paragraph"}],"kind":"content"}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"seeAlsoSections":[{"anchor":"Configuring-a-Display-Link","generated":true,"identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate"],"title":"Configuring a Display Link"}],"variants":[{"paths":["\/documentation\/quartzcore\/cametaldisplaylink\/preferredframeraterange"],"traits":[{"interfaceLanguage":"swift"}]},{"paths":["\/documentation\/quartzcore\/cametaldisplaylink\/preferredframeraterange"],"traits":[{"interfaceLanguage":"occ"}]}],"references":{"doc://com.apple.documentation/documentation/UIKit/UIScreen":{"abstract":[{"text":"An object that defines the properties associated with a hardware-based display.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScreen"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/UIKit\/UIScreen","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"UIScreen"}],"role":"symbol","title":"UIScreen","type":"topic","url":"\/documentation\/uikit\/uiscreen"},"doc://com.apple.documentation/documentation/UIKit/UIScreen/maximumFramesPerSecond":{"abstract":[{"text":"The maximum number of frames per second a screen can render.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"maximumFramesPerSecond"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Si","text":"Int"}],"identifier":"doc:\/\/com.apple.documentation\/documentation\/UIKit\/UIScreen\/maximumFramesPerSecond","kind":"symbol","role":"symbol","title":"maximumFramesPerSecond","type":"topic","url":"\/documentation\/uikit\/uiscreen\/maximumframespersecond"},"doc://com.apple.documentation/documentation/technologies":{"abstract":[],"identifier":"doc:\/\/com.apple.documentation\/documentation\/technologies","kind":"technologies","role":"overview","title":"Technologies","type":"topic","url":"\/documentation\/technologies"},"doc://com.apple.quartzcore/documentation/QuartzCore":{"abstract":[{"text":"Render, compose, and animate visual elements.","type":"text"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore","kind":"symbol","navigatorTitle":[{"kind":"text","text":"Core Animation"}],"role":"collection","title":"Core Animation","type":"topic","url":"\/documentation\/quartzcore"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAFrameRateRange":{"abstract":[],"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAFrameRateRange"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAFrameRateRange","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAFrameRateRange"}],"role":"symbol","title":"CAFrameRateRange","type":"topic","url":"\/documentation\/quartzcore\/caframeraterange"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAFrameRateRange/default":{"abstract":[],"fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"`default`"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:@S@CAFrameRateRange","text":"CAFrameRateRange"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAFrameRateRange\/default","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAFrameRateRangeDefault"}],"role":"symbol","title":"default","type":"topic","url":"\/documentation\/quartzcore\/caframeraterange\/default"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink":{"abstract":[{"text":"A class your Metal app uses to register for callbacks to synchronize its animations for a display.","type":"text"}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAMetalDisplayLink"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"CAMetalDisplayLink"}],"role":"symbol","title":"CAMetalDisplayLink","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/delegate":{"abstract":[{"text":"An instance of a type your app implements that responds to the system’s callbacks.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"delegate"},{"kind":"text","text":": (any "},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(pl)CAMetalDisplayLinkDelegate","text":"CAMetalDisplayLinkDelegate"},{"kind":"text","text":")?"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"delegate"}],"role":"symbol","title":"delegate","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/delegate"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/preferredFrameLatency":{"abstract":[{"text":"The amount of time, in frames, your app requests to render a frame.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameLatency"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"s:Sf","text":"Float"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"preferredFrameLatency"}],"role":"symbol","title":"preferredFrameLatency","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/preferredframelatency"},"doc://com.apple.quartzcore/documentation/QuartzCore/CAMetalDisplayLink/preferredFrameRateRange":{"abstract":[{"text":"A range of frequencies your app allows for frame updates, affecting how often the system invokes your delegate’s callback.","type":"text"}],"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameRateRange"},{"kind":"text","text":": "},{"kind":"typeIdentifier","preciseIdentifier":"c:@S@CAFrameRateRange","text":"CAFrameRateRange"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameRateRange","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"preferredFrameRateRange"}],"role":"symbol","title":"preferredFrameRateRange","type":"topic","url":"\/documentation\/quartzcore\/cametaldisplaylink\/preferredframeraterange"},"doc://com.apple.quartzcore/documentation/QuartzCore/optimizing-iphone-and-ipad-apps-to-support-promotion-displays":{"abstract":[{"text":"Improve your app’s visual appearance and save power by requesting preferred refresh rates and synchronizing your animations with the system.","type":"text"}],"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/optimizing-iphone-and-ipad-apps-to-support-promotion-displays","kind":"article","role":"article","title":"Optimizing iPhone and iPad apps to support ProMotion displays","type":"topic","url":"\/documentation\/quartzcore\/optimizing-iphone-and-ipad-apps-to-support-promotion-displays"}},"variantOverrides":[{"patch":[{"op":"replace","path":"\/identifier\/interfaceLanguage","value":"occ"},{"op":"replace","path":"\/metadata\/platforms","value":[{"introducedAt":"17.0","name":"iOS"},{"introducedAt":"17.0","name":"iPadOS"},{"introducedAt":"17.0","name":"Mac Catalyst"},{"introducedAt":"14.0","name":"macOS"},{"introducedAt":"17.0","name":"tvOS"},{"introducedAt":"1.0","name":"visionOS"}]},{"op":"replace","path":"\/metadata\/roleHeading","value":"Instance Property"},{"op":"replace","path":"\/metadata\/title","value":"preferredFrameRateRange"},{"op":"replace","path":"\/metadata\/symbolKind","value":"property"},{"op":"replace","path":"\/metadata\/fragments","value":[{"kind":"identifier","text":"preferredFrameRateRange"}]},{"op":"replace","path":"\/hierarchy","value":{"paths":[["doc:\/\/com.apple.documentation\/documentation\/technologies","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink"]]}},{"op":"add","path":"\/topicSections","value":null},{"op":"add","path":"\/relationshipsSections","value":null},{"op":"replace","path":"\/seeAlsoSections","value":[{"anchor":"Configuring-a-Display-Link","generated":true,"identifiers":["doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/preferredFrameLatency","doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAMetalDisplayLink\/delegate"],"title":"Configuring a Display Link"}]},{"op":"replace","path":"\/primaryContentSections\/0","value":{"declarations":[{"languages":["occ"],"platforms":["iOS","iPadOS","Mac Catalyst","macOS","tvOS","visionOS"],"tokens":[{"kind":"keyword","text":"@property"},{"kind":"text","text":" ("},{"kind":"keyword","text":"nonatomic"},{"kind":"text","text":") "},{"identifier":"doc:\/\/com.apple.quartzcore\/documentation\/QuartzCore\/CAFrameRateRange","kind":"typeIdentifier","preciseIdentifier":"c:@S@CAFrameRateRange","text":"CAFrameRateRange"},{"kind":"text","text":" "},{"kind":"identifier","text":"preferredFrameRateRange"},{"kind":"text","text":";"}]}],"kind":"declarations"}},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1UIKit~1UIScreen\/fragments","value":[{"kind":"identifier","text":"UIScreen"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1UIKit~1UIScreen~1maximumFramesPerSecond\/fragments","value":[{"kind":"identifier","text":"maximumFramesPerSecond"}]},{"op":"add","path":"\/references\/doc:~1~1com.apple.documentation~1documentation~1UIKit~1UIScreen~1maximumFramesPerSecond\/navigatorTitle","value":[{"kind":"identifier","text":"maximumFramesPerSecond"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAFrameRateRange\/title","value":"CAFrameRateRange"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAFrameRateRange\/fragments","value":[{"kind":"identifier","text":"CAFrameRateRange"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAFrameRateRange\/navigatorTitle","value":[{"kind":"identifier","text":"CAFrameRateRange"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAFrameRateRange~1default\/title","value":"CAFrameRateRangeDefault"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAFrameRateRange~1default\/fragments","value":[{"kind":"identifier","text":"CAFrameRateRangeDefault"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink\/title","value":"CAMetalDisplayLink"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink\/fragments","value":[{"kind":"identifier","text":"CAMetalDisplayLink"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink\/navigatorTitle","value":[{"kind":"identifier","text":"CAMetalDisplayLink"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1delegate\/title","value":"delegate"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1delegate\/fragments","value":[{"kind":"identifier","text":"delegate"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameLatency\/title","value":"preferredFrameLatency"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameLatency\/fragments","value":[{"kind":"identifier","text":"preferredFrameLatency"}]},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameRateRange\/title","value":"preferredFrameRateRange"},{"op":"replace","path":"\/references\/doc:~1~1com.apple.quartzcore~1documentation~1QuartzCore~1CAMetalDisplayLink~1preferredFrameRateRange\/fragments","value":[{"kind":"identifier","text":"preferredFrameRateRange"}]}],"traits":[{"interfaceLanguage":"occ"}]}]}