iOS - Tips - 黑魔法
1. objc_subclassing_restricted
在@ interface 前, 用__attribute__((objc_subclassing_restricted))修飾的類, 不允許繼承.
2. objc_requires_super
用- (void)method __attribute__((objc_requires_super));修飾的方法, 標識著在子類繼承這個方法時, 需要呼叫 super
3. objc_boxable
@(...) 語法糖可以將基本資料型別 box 成 NSNumber 物件,假如想 box 一個 struct 型別或是 union 型別成 NSValue 物件,可以使用這個屬性:
typedefstruct__attribute__((objc_boxable)) {
CGFloatx, y, width, height;
} XXRect;
CGRect rect1 = {1, 2, 3, 4};
NSValue *value1 = @(rect1);// <--- Compile Error
XXRect rect2 = {1, 2, 3, 4};
NSValue *value2 = @(rect2); // √
4. constructor / destructor
構造器和析構器,加上這兩個屬性的函式會在分別在可執行檔案(或 shared library)load和 unload 時被呼叫,可以理解為在 main() 函式呼叫前和 return 後執行:
PS:若有多個 constructor 且想控制優先順序的話,可以寫成 __attribute__((constructor(101))),裡面的數字越小優先順序越高,1 ~ 100 為系統保留。
__attribute__((constructor)) static void beforeMain(void) { NSLog(@"beforeMain"); } __attribute__((destructor)) static void afterMain(void) { NSLog(@"afterMain"); }
int main(int argc, const char * argv[]) {
NSLog(@"main");
return 0;
} // Console: // "beforeMain" -> "main" -> "afterMain"
相關文章
- 《iOS Tips 一》iOS
- iOS H5容器的一些探究(二):iOS下的黑魔法NSURLProtoiOSH5
- Tips
- Linux TipsLinux
- 前端 - tips前端
- Tips: EloquentModel
- NPM TipsNPM
- AutoLayout Tips
- Tips HTMLHTML
- VSCode TipsVSCode
- Matplolib Tips
- NumPy Tips
- idea tipsIdea
- 每日 30 秒 ⏱ 除錯黑魔法除錯
- typescript + amd tipsTypeScript
- Python常用TipsPython
- 雜項 tips
- Visual Studio Tips
- laravel migrations : tipsLaravel
- jQuery tips and tricksjQuery
- PostgreSQL PSQL tipsSQL
- Vue 的初階黑魔法 —— 模板語法Vue
- 2、Flutter Tips - MediaQuery;Flutter
- Embedding Kotlin Playground TipsKotlin
- swift tips - 1~10Swift
- Mac && Xcode 日常TipsMacXCode
- [Bash] Curly braces tips
- postman 工具使用TipsPostman
- Python中的三個”黑魔法“與”騷操作“Python
- 30分鐘讓你掌握Git的黑魔法Git
- 導航網頁Tips網頁
- Flutter 效能優化 TipsFlutter優化
- 1、Flutter Tips - Widget Key;Flutter
- layer Tips引數使用
- Spring security config httpSecurity tipsSpringHTTP
- Vim tips——Working with external commands
- Metasploit技巧命令支援tips
- Python的黑魔法@property裝飾器的使用技巧Python