2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
isa
सूचकस्मृतिसंरचनाउद्देश्य-ग, ९.isa
सूचकाः वस्तुनां वर्गानां च मध्ये महत्त्वपूर्णः सेतुः भवति । इदं न केवलं रनटाइम् सिस्टम् इत्यस्य वस्तुप्रकारस्य परिचये सहायकं भवति, अपितु केषुचित् स्मृति-प्रदर्शन-अनुकूलनेषु अपि भागं गृह्णाति ।अयं लेखः गभीरतया व्याख्यास्यतिisa
सूचकानाम् स्मृतिसंरचना, यत्र प्रारम्भिकेषु आधुनिककार्यन्वयनेषु तस्य विकासः अपि अस्ति ।
isa
सूचकः?प्रत्येकं Objective-C वस्तुनः a isa
एकः सूचकः यः वस्तुनः वर्गवस्तुं सूचयति ।वर्गवस्तु स्वयं अपि वस्तु, तस्य चisa
सूचकः मेटा-वर्गस्य वस्तुं दर्शयति ।मेटाक्लास् ऑब्जेक्ट्स् क्लास मेथड् सञ्चयन्ति, तेषां च...isa
सूचकः अन्ततः मूलमेटाक्लास् (प्रायःNSObject
मेटाक्लास)।
isa
सूचक संरचनाप्रारम्भिक उद्देश्य-ग कार्यान्वयनयोः, २.isa
सूचकः केवलं वर्गवस्तूनाम् एकं संरचनां दर्शयति । अत्र एकं विशिष्टं प्रारम्भिकं कार्यान्वयनम् उदाहरणम् अस्ति :
struct objc_object {
Class isa; // 指向类对象的指针
};
typedef struct objc_class *Class; // Class 的本质是 objc_class 类型的结构体指针
struct objc_class {
Class isa; // 指向元类对象的指针
Class super_class; // 指向父类对象的指针
// 其他类相关的元数据
};
अस्याः संरचनायाः अन्तर्गतं : १.
isa
सूचकः वर्गस्य वस्तुं प्रति सूचयति ।isa
सूचकः मेटाक्लास् ऑब्जेक्ट् प्रति सूचयति ।isa
सूचकः मूलमेटाक्लास् वस्तुं प्रति सूचयति ।isa
सूचक संरचना६४-बिट्-प्रणालीषु आधुनिक-Objective-C रनटाइम्षु च,isa
सूचकाः अधिकजटिलसङ्घरूपेण पुनः परिकल्पिताः (union isa_t
), यस्मिन् न केवलं वर्ग-वस्तूनाम् सूचकाः सन्ति, अपितु स्मृति-उपयोगं कार्यक्षमतां च अनुकूलितुं अन्ये ध्वजाः सूचनाः च सन्ति ।निम्नलिखितम् अस्तिisa_t
संरचनायाः सरलीकृतं उदाहरणं : १.
union isa_t {
isa_t() { }
isa_t(uintptr_t value) : bits(value) { }
Class cls; // 指向类对象的指针
uintptr_t bits; // 包含位域信息的位模式
struct {
uintptr_t nonpointer : 1; // 是否启用优化的 non-pointer isa
uintptr_t has_assoc : 1; // 是否有关联对象
uintptr_t has_cxx_dtor : 1; // 是否有 C++ 析构函数
uintptr_t shiftcls : 33; // 类指针(经过位移和压缩)
uintptr_t magic : 6; // 调试用的魔数
uintptr_t weakly_referenced : 1; // 是否被弱引用
uintptr_t deallocating : 1; // 是否正在释放
uintptr_t has_sidetable_rc : 1; // 是否有辅助引用计数表
uintptr_t extra_rc : 19; // 额外的引用计数
};
};
isa
किं सः अ-सूचकप्रकारः अस्ति (स्मृतिविन्यासं अनुकूलितं कुर्वन्तु, अतिरिक्तसूचनाः संग्रहयन्तु) ।प्रारम्भिकेषु Objective-C कार्यान्वयनेषु, सन्दर्भगणना प्रायः वस्तुनः संरचनायाः भागरूपेण प्रत्यक्षतया वस्तुनि संगृहीता आसीत् । उदाहरणतया:
struct objc_object {
Class isa; // 指向类对象的指针
uintptr_t retainCount; // 引用计数
};
आधुनिक Objective-C रनटाइम्स् मध्ये सन्दर्भगणना via... isa
सूचकानाम् अनुकूलितसंरचना तथा Side Table सहायकदत्तांशसंरचना प्रबन्धिता भवति ।
isa
सूचकानाम् अनुकूलितसंरचनासु, उदा.extra_rc
क्षेत्रम्।isa
यदा सूचकः यत् परिधिं प्रतिनिधितुं शक्नोति तदा सन्दर्भगणना Side Table इति सहायकदत्तांशसंरचने संगृह्यते ।isa
सूचकानाम् लाभाःisa
सूचकेषु अन्यस्मृतिक्षेत्रेषु प्रवेशः न्यूनीकरोति, कार्यक्षमतां च सुदृढं भवति ।यद्यपि विकासकाः प्रायः प्रत्यक्षतया सह अन्तरक्रियां न कुर्वन्ति isa
सूचकाः अन्तरक्रियां कुर्वन्ति, परन्तु तेषां संरचनायाः अवगमनं त्रुटिनिवारणाय, कार्यक्षमतायाः अनुकूलनार्थं च सहायकं भवति । अत्र एकं उपयोगोदाहरणं अस्ति यत् वस्तुनः वर्गसूचनाम् अभिगत्य तस्य प्रकारं प्रदर्शयति ।
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface MyClass : NSObject
@end
@implementation MyClass
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyClass *obj = [[MyClass alloc] init];
Class cls = object_getClass(obj);
NSLog(@"Class name: %s", class_getName(cls));
// 访问 isa 指针信息(需要通过运行时函数)
NSLog(@"isa pointer: %p", *(uintptr_t *)obj);
}
return 0;
}
isa
Objective-C runtime इत्यस्मिन् सूचकाः महत्त्वपूर्णां भूमिकां निर्वहन्ति, प्रारम्भिकसरलसूचनात् आरभ्य वर्गवस्तूनाम् आधुनिकजटिलपर्यन्तंisa_t
संरचना, यत् स्मृति-उपयोगं कार्यक्षमतां च अनुकूलितुं साहाय्यं करोति ।अवबोधनम्isa
सूचकानाम् स्मृतिसंरचनानां च विकासः अस्मान् Objective-C इत्यस्य रनटाइम् तन्त्रं अधिकतया ग्रहीतुं कुशलं कोडं लिखितुं च साहाय्यं कर्तुं शक्नोति ।
आशासे यत् एषः लेखः भवद्भ्यः Objective-C इत्यस्य गहनतया अवगमनं प्राप्तुं साहाय्यं कर्तुं शक्नोति isa
सूचक स्मृति संरचना। यदि भवतः किमपि प्रश्नं वा सुझावः वा अस्ति तर्हि चर्चायै सन्देशं त्यजन्तु।