私は最近、UIActionSheet
実際に使用可能なデリゲート セレクターを表示する前にキャッシュすることを発見しました。
本当に知る必要があるときに、デリゲートが特定のセレクターに応答するかどうかを判断しないのはなぜですか? 本当に[delegate respondsToSelector:@selector()]
実行が遅いですか?この種のデザイン パターンを独自のコードで使用する必要がありますか? どんなアイデアでも大歓迎です!
UIActionSheet.h の flags 構造体は次のとおりです。
struct {
unsigned int numberOfRows:7;
unsigned int delegateAlertSheetButtonClicked:1;
unsigned int delegateDidPresentAlertSheet:1;
unsigned int delegateDidDismissAlertSheet:1;
unsigned int hideButtonBar:1;
unsigned int alertStyle:3;
unsigned int dontDimBackground:1;
unsigned int dismissSuspended:1;
unsigned int dontBlockInteraction:1;
unsigned int sheetWasPoppedUp:1;
unsigned int sheetWasShown:1;
unsigned int animating:1;
unsigned int hideWhenDoneAnimating:1;
unsigned int layoutWhenDoneAnimating:1;
unsigned int titleMaxLineCount:2;
unsigned int bodyTextMaxLineCount:3;
unsigned int runsModal:1;
unsigned int runningModal:1;
unsigned int addedTextView:1;
unsigned int addedTableShadows:1;
unsigned int showOverSBAlerts:1;
unsigned int showMinTableContent:1;
unsigned int bodyTextTruncated:1;
unsigned int orientation:3;
unsigned int popupFromPoint:1;
unsigned int inPopover:1;
unsigned int delegateBodyTextAlignment:1;
unsigned int delegateClickedButtonAtIndex:1;
unsigned int delegateClickedButtonAtIndex2:1;
unsigned int delegateCancel:1;
unsigned int delegateCancel2:1;
unsigned int delegateWillPresent:1;
unsigned int delegateWillPresent2:1;
unsigned int delegateDidPresent:1;
unsigned int delegateDidPresent2:1;
unsigned int delegateWillDismiss:1;
unsigned int delegateWillDismiss2:1;
unsigned int delegateDidDismiss:1;
unsigned int delegateDidDismiss2:1;
unsigned int dontCallDismissDelegate:1;
unsigned int useAutomaticKB:1;
unsigned int twoColumnsLayoutMode:7; // one column || even width (leaves empty space) || first button wider || last button wider
unsigned int threeColumnsLayoutMode:7; // one column || even width (leaves empty space) || first button wider || last button wider
unsigned int shouldHandleFirstKeyUpEvent:1; // when presenting with hardware KB we have to handle the first key up event we get so we don't end up repeating the last key
unsigned int cancelWhenDoneAnimating:1;
unsigned int useThreePartButtons:1; // phone numbers layout
unsigned int useTwoPartButtons:1; // doc interaction layout
unsigned int displaySelectedButtonGlyph:1;
int indexOfSelectedButton:7; // default -1 (no checkmark) otherwise will display a checkbox (this for the airtunes action sheet)
unsigned int useCustomSelectedButtonGlyph:1;
} _modalViewFlags;