Gerçekleştirmek için yeterli zamana değmeyecek küçük bir optimizasyon ve kişisel olarak hiç kullanmadığım ama hala bilmem gereken iyi bir optimizasyon. Aynı mesajı tekrar tekrar aynı nesneye göndermek yerine, doğrudan yöntem uygulamasını kullanarak tekrarlanan yöntem gönderimini devre dışı bırakabilirsiniz. Yerine Örnek:
for (int i = 0; i < 100000000; i++)
[someObject messageWithInt:i];
Sen deneyebilirsiniz:
SEL theSelector = @selector(messageWithInt:);
IMP theMethod = [someObject methodForSelector:theSelector];
for (int i = 0; i < 100000000; i++)
theMethod (someObject, theSelector, i);
Bu yöntem araması yalnızca bir kez yapılır anlamına gelir ve geri IMP
değeri üzerinden doğrudan yöntemi çağırabilirsiniz. Tüm Objective-C yöntemi uygulamalarının en az iki argümanı vardır, ilk argüman id
tipinin alıcı nesnesi olup, metot uygulaması içinde self
olur ve ikinci argüman metodu belirlemek için kullanılan [SEL
tipinde] seçicidir. uygulama ve yöntem uygulamasında _cmd
olur.
“ işlev tanımını (” doğru ifadesini hatırlayamıyorum) kullanmazsanız, bu yaklaşım hızla ekşitirebilir. IMP
, void*
döndüren bir işlev için typedef
ve bağımsız değişken olarak (id,SEL,...)
alır. Bu yöntem aslında float
gibi başka bir şey döndürürse, kullanımı zahmetli hale getirebilir. Bu madde ile yardımcı olmak için, bu gibi -methodForSelector:
dönüş değer dağıtmak yapabilirsiniz: theMethod
kaydedebilir, bazı bakım ile
typedef float (*MyMethodIMP)(id,SEL,int);
SEL theSel = @selector(messageWithInt:);
MyMethodIMP theMethod = (MyMethodIMP)[someObject methodForSelector:theSel];
float result = 0.0;
for (int i = 0; i < 100000000; i++)
result += theMethod (someObject, theSel, i);
ve belirli bir sınıfın tüm örnekleri için kullanmak mümkün olabilir, sadece bir örnek değil, dikkatli bir şekilde bas.
Bu konu burada ayrıntılı olarak ele alınmıştır: Kakao gibi üst düzey bir çerçevede http://www.mulle-kybernetik.com/artikel/Optimization/ – codewarrior
, bu gibi en küçük optimizasyonlar zaman kaybı vardır (birçok derleyici ayarından farklı olarak), birçok temel sınıf zaten ağır bir şekilde optimize edilmiştir. Sadece profil bir şey fazladan zaman alıyorsa gösterir. – shosti