Middle
Маалымат жыйында болушу мүмкүнбү жана шилтеме стекте болушу мүмкүнбү? Көзқарасыңызды түшүндүрүңүз.
sobes.tech AI
AIден жооп
Ооба, бул стандарттуу жүрүм-турум.
- Тек: Локалдык өзгөрмөлөрдү жана объекттерге шилтемелерди сактайт. Тектеги маалыматтын жашоо мөөнөтү функциянын же код блогунун чөйрөсү менен байланыштуу. Маалыматка кирүү тез.
- Куча (Heap): Динамик түрдө түзүлгөн объекттерди сактайт. Кучадагы маалыматтын жашоо мөөнөтү чөйрөгө байланыштуу эмес жана эс тутумду башкаруу механизми (ARC iOSта) менен башкарылат. Маалыматка кирүү жайыраак, чым стекте.
Биз Swiftте класс объектисин түзгөндө (мисалы), объект өзү кучада жайгашат. Биз аны сактоо үчүн белгилеген өзгөрмө негизинен кучадагы маалыматка шилтеме (ссылка) болуп саналат жана ал стекте сакталат.
Swiftтеги мисал:
// MyObject — класс ( шилтемелүү түр), кучада жайгашкан
class MyObject {
var name: String
init(name: String) {
self.name = name
}
}
func myFunction() {
// myObject — стекте жайгашкан өзгөрмө, ал MyObject экземплярына шилтеме
// кучада
let myObject = MyObject(name: "Test")
// ... myObject колдонуу ...
} // myObject (шилтеме) функциядан чыгып кеткенде стектен алынып салынат
// MyObject экземпляры ARC тарабынан жокко чыгат, эгер күчтүү шилтемелер калбаса
Objective-Cда окшош:
// MyObject — класс ( шилтемелүү түр), кучада жайгашкан
@interface MyObject : NSObject
@property (nonatomic, strong) NSString *name;
- (instancetype)initWithName:(NSString *)name;
@end
@implementation MyObject
- (instancetype)initWithName:(NSString *)name {
self = [super init];
if (self) {
_name = name;
}
return self;
}
@end
void myFunction() {
// myObject — стекте жайгашкан өзгөрмө, ал MyObject экземплярына шилтеме
// кучада
MyObject *myObject = [[MyObject alloc] initWithName:@"Test"];
// ... myObject колдонуу ...
} // myObject (шилтеме) функциядан чыгып кеткенде стектен алынып салынат
// MyObject экземпляры ARC тарабынан жокко чыгат, эгер күчтүү шилтемелер калбаса
Экөөдө учурларда myObject өзгөрмөсү стекте жайгашкан, ал эми MyObject объектисинин өзү — кучада. myObject өзгөрмөсү жадынын дарегин камтыйт, анда кучадагы объект жайгашкан.