SEL實際上是對方法的一種包裝,將方法包裝成一個SEL類型的數據,去找對應的方法地址。找到方法地址就能夠調用方法, 其實消息就是SEL。對於下列方法調用:spa
[p test2];指針
主要有如下步驟:orm
1.把test2包裝成SEL類型的數據對象
2.根據SEL數據找到對應的方法地址內存
3.根據方法地址調用對應的方法form
好比一個類中有兩個方法:+test和-test2每一個方法在內存中的地址都有一個對應的SEL與之對應test
SEL s1 == +test地址select
SEL s2 == -test2地址方法
對象找要調用的方法時,isa指針會根據調用的方法名在類中找到相關的SEL對象(方法地址)去調用。因此,調用方法還能夠用以下形式:數據
[pperformSelector:@selector(test2)];
performSelector:@selector(test2)返回的就是test2的方法地址。
若是方法還有參數,好比- (void)test3:(NSString *)abc,還能夠按照以下格式調用:
[pperformSelector:@selector(test3:) [Object:@」abc」]];
對於上述調用方法,test3後必定要加」:「,由於」:」也是有參數方法的方法名的一部分。