{"id":13371,"date":"2024-03-15T06:57:40","date_gmt":"2024-03-15T06:57:40","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/"},"modified":"2025-08-05T17:14:39","modified_gmt":"2025-08-05T17:14:39","slug":"explanation-and-usage-of-performselector","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/","title":{"rendered":"Objective-C performSelector Guide"},"content":{"rendered":"<p>performSelector is a method in the NSObject class that is used to call a specific method on the current thread.<\/p>\n<p>Principle:<br \/>\nThe principle of the `performSelector` method is to leverage Objective-C&#8217;s messaging mechanism. When calling the `performSelector` method, runtime will dynamically search for and call the corresponding method based on the method&#8217;s name and parameter types. Therefore, we can use the `performSelector` method to dynamically call methods without the need to hardcode the method calls during coding.<\/p>\n<p>Usage:<br \/>\nThe performSelector method has multiple overloads, which can be selected based on actual needs. Several commonly used usages are as follows:<\/p>\n<ol>\n<li>performSelector method with no arguments:<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code>- (<span class=\"hljs-type\">void<\/span>)performSelector:(SEL)aSelector\r\n<\/code><\/pre>\n<p>This method can be used to call a method with no parameters. For example:<\/p>\n<pre class=\"post-pre\"><code>[<span class=\"hljs-keyword\">self<\/span> performSelector:<span class=\"hljs-keyword\">@selector<\/span>(doSomething)];\r\n<\/code><\/pre>\n<p>Equivalent to:<\/p>\n<pre class=\"post-pre\"><code>[<span class=\"hljs-keyword\">self<\/span> doSomething];\r\n<\/code><\/pre>\n<ol>\n<li>performSelector method with one parameter:<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code>- (<span class=\"hljs-type\">void<\/span>)performSelector:(SEL)aSelector withObject:(<span class=\"hljs-type\">id<\/span>)anObject\r\n<\/code><\/pre>\n<p>This usage can be applied to invoke a method with one parameter. For example:<\/p>\n<pre class=\"post-pre\"><code>[<span class=\"hljs-keyword\">self<\/span> performSelector:<span class=\"hljs-keyword\">@selector<\/span>(doSomethingWithObject:) withObject:obj];\r\n<\/code><\/pre>\n<p>Equivalent to:<\/p>\n<pre class=\"post-pre\"><code>[<span class=\"hljs-keyword\">self<\/span> doSomethingWithObject:obj];\r\n<\/code><\/pre>\n<ol>\n<li>Using the performSelector method with multiple arguments:<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code>- (<span class=\"hljs-type\">void<\/span>)performSelector:(SEL)aSelector withObject:(<span class=\"hljs-type\">id<\/span>)anObject1 withObject:(<span class=\"hljs-type\">id<\/span>)anObject2\r\n<\/code><\/pre>\n<p>This method can be used to call methods with multiple parameters. For example:<\/p>\n<pre class=\"post-pre\"><code>[<span class=\"hljs-keyword\">self<\/span> performSelector:<span class=\"hljs-keyword\">@selector<\/span>(doSomethingWithObject1:object2:) withObject:obj1 withObject:obj2];\r\n<\/code><\/pre>\n<p>Equivalent to:<\/p>\n<pre class=\"post-pre\"><code>[<span class=\"hljs-keyword\">self<\/span> doSomethingWithObject1:obj1 object2:obj2];\r\n<\/code><\/pre>\n<p>It is important to note that when using the performSelector method, it performs selector checking and parameter type matching. If the selector cannot be found or the parameter types do not match, it will lead to a program crash. To avoid this situation, you can use the respondsToSelector method to determine if an object has implemented a specific method.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>performSelector is a method in the NSObject class that is used to call a specific method on the current thread. Principle: The principle of the `performSelector` method is to leverage Objective-C&#8217;s messaging mechanism. When calling the `performSelector` method, runtime will dynamically search for and call the corresponding method based on the method&#8217;s name and parameter [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[12184,240,17804,9125,17803],"class_list":["post-13371","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-dynamic-methods","tag-ios-development","tag-nsobject","tag-objective-c","tag-performselector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Objective-C performSelector Guide - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn how performSelector works in Objective-C, its principles and usage for dynamic method invocation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Objective-C performSelector Guide\" \/>\n<meta property=\"og:description\" content=\"Learn how performSelector works in Objective-C, its principles and usage for dynamic method invocation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T06:57:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-05T17:14:39+00:00\" \/>\n<meta name=\"author\" content=\"Isabella Edwards\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Isabella Edwards\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\"},\"author\":{\"name\":\"Isabella Edwards\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\"},\"headline\":\"Objective-C performSelector Guide\",\"datePublished\":\"2024-03-15T06:57:40+00:00\",\"dateModified\":\"2025-08-05T17:14:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\"},\"wordCount\":227,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"dynamic methods\",\"iOS development\",\"NSObject\",\"Objective-C\",\"performSelector\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\",\"name\":\"Objective-C performSelector Guide - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T06:57:40+00:00\",\"dateModified\":\"2025-08-05T17:14:39+00:00\",\"description\":\"Learn how performSelector works in Objective-C, its principles and usage for dynamic method invocation.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Objective-C performSelector Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\",\"name\":\"Isabella Edwards\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"caption\":\"Isabella Edwards\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Objective-C performSelector Guide - Blog - Silicon Cloud","description":"Learn how performSelector works in Objective-C, its principles and usage for dynamic method invocation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/","og_locale":"en_US","og_type":"article","og_title":"Objective-C performSelector Guide","og_description":"Learn how performSelector works in Objective-C, its principles and usage for dynamic method invocation.","og_url":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T06:57:40+00:00","article_modified_time":"2025-08-05T17:14:39+00:00","author":"Isabella Edwards","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Isabella Edwards","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/"},"author":{"name":"Isabella Edwards","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd"},"headline":"Objective-C performSelector Guide","datePublished":"2024-03-15T06:57:40+00:00","dateModified":"2025-08-05T17:14:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/"},"wordCount":227,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["dynamic methods","iOS development","NSObject","Objective-C","performSelector"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/","url":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/","name":"Objective-C performSelector Guide - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T06:57:40+00:00","dateModified":"2025-08-05T17:14:39+00:00","description":"Learn how performSelector works in Objective-C, its principles and usage for dynamic method invocation.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/explanation-and-usage-of-performselector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Objective-C performSelector Guide"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd","name":"Isabella Edwards","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","caption":"Isabella Edwards"},"url":"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/13371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=13371"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/13371\/revisions"}],"predecessor-version":[{"id":157338,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/13371\/revisions\/157338"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=13371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=13371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=13371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}