1
2
3
4
5
6
7
8
9
10
11
|
1
2
3
4
5
6
7
8
9
|
-
-
-
+
|
/*
* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
* 2018, 2019, 2020
* Jonathan Schleifer <js@nil.im>
* Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
︙ | | |
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
|
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
|
-
+
-
-
+
-
|
}
+ (OFString *)description
{
return [self className];
}
+ (IMP)replaceClassMethod: (SEL)selector
+ (IMP)replaceClassMethod: (SEL)selector withMethodFromClass: (Class)class
withMethodFromClass: (Class)class
{
IMP method = [class methodForSelector: selector];
if (method == NULL)
@throw [OFInvalidArgumentException exception];
return class_replaceMethod(object_getClass(self), selector, method,
typeEncodingForSelector(object_getClass(class), selector));
}
+ (IMP)replaceInstanceMethod: (SEL)selector
+ (IMP)replaceInstanceMethod: (SEL)selector withMethodFromClass: (Class)class
withMethodFromClass: (Class)class
{
IMP method = [class instanceMethodForSelector: selector];
if (method == NULL)
@throw [OFInvalidArgumentException exception];
return class_replaceMethod(self, selector, method,
|
︙ | | |
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
|
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
|
-
+
-
|
#elif defined(OF_APPLE_RUNTIME)
id (*imp)(id, SEL) = (id (*)(id, SEL))objc_msgSend;
#endif
return imp(self, selector);
}
- (id)performSelector: (SEL)selector
- (id)performSelector: (SEL)selector withObject: (id)object
withObject: (id)object
{
#if defined(OF_OBJFW_RUNTIME)
id (*imp)(id, SEL, id) =
(id (*)(id, SEL, id))objc_msg_lookup(self, selector);
#elif defined(OF_APPLE_RUNTIME)
id (*imp)(id, SEL, id) = (id (*)(id, SEL, id))objc_msgSend;
#endif
|
︙ | | |
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
|
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
|
-
+
-
|
id (*imp)(id, SEL, id, id, id, id) =
(id (*)(id, SEL, id, id, id, id))objc_msgSend;
#endif
return imp(self, selector, object1, object2, object3, object4);
}
- (void)performSelector: (SEL)selector
- (void)performSelector: (SEL)selector afterDelay: (of_time_interval_t)delay
afterDelay: (of_time_interval_t)delay
{
void *pool = objc_autoreleasePoolPush();
[OFTimer scheduledTimerWithTimeInterval: delay
target: self
selector: selector
repeats: false];
|
︙ | | |