سؤال

لا أفهم تماما المتغيرات الثابتة عند تحديدها في تنفيذ واجهة. في الأساليب، أفهم كيف تختلف عن المتغيرات المحلية، ولكن ليس عند تحديدها مباشرة في التنفيذ.

ننظر في هذه الأمثلة. ما الفرق الذي يقوم به هذان عمليا؟

#include "MyClass.h"

@implementation MyClass
int myInt;
...
@end

و:

#include "MyClass.h"

@implementation MyClass
static int myInt;
...
@end

myInt في كلتا الحالتين مرئية لجميع الأساليب، وإذا قمت بتفسير اختبار ركضت بشكل صحيح، myInt سوف تكون في كلتا الحالتين نفس المتغير لحالات مختلفة من الفصل.

هل كانت مفيدة؟

المحلول

الكلمة الأساسية "الثابتة" في هذا السياق هي نفسها كما ستكون في عادي C: إنها تحد من نطاق القيم إلى الملف الحالي.

نصائح أخرى

لسوء الحظ، لديها تأثيرات مختلفة اعتمادا على المكان الذي تستخدمه فيه.

وظائف ثابتة:
بشكل افتراضي، تحتوي جميع الوظائف على نطاق عالمي. يتيح لك المواصفات الثابتة تحديد نطاق الوظيفة إلى الملف الحالي.

المتغيرات المحلية الثابتة:
عند استخدام المعدل الثابت على متغير محلي، فإن الوظيفة "تتذكر" قيمتها عبر الدعوات. على سبيل المثال.

// main.m
#import <Foundation/Foundation.h>

int countByTwo() {
    static int currentCount = 0;
    currentCount += 2;
    return currentCount;
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"%d", countByTwo());    // 2
        NSLog(@"%d", countByTwo());    // 4
        NSLog(@"%d", countByTwo());    // 6
    }
    return 0;
}

لا يؤثر استخدام الكلمة الأساسية الثابتة هذا على نطاق المتغيرات المحلية.
اقرأ المزيد عن كلمة رئيسية ثابتة.

"في كل من C والهدف - ج، متغير ثابت هو متغير يتم تخصيصه لأكمله العمر من البرنامج. هذا على عكس المتغيرات التلقائية، التي يوجد عمرها خلال مكالمة وظيفة واحدة؛ والمتغيرات المخصصة بشكل حيوي مثل الكائنات ، والتي يمكن إطلاقها من الذاكرة عندما لم تعد تستخدم. ببساطة وضعت، يتم الحفاظ على قيمة المتغير الثابت في جميع مكالمات الوظيفة / الطريقة. عند الإعلان عن غيرها من الوظيفة، يكون متغير ثابت مرئي لكل شيء داخل الملف الذي هو عليه أعلن؛ عند الإعلان داخل الوظيفة أو الطريقة، يكون مرئيا فقط ضمن هذه الوظيفة أو الطريقة، ولكن يتم الاحتفاظ بالقيمة بين المكالمات. "

تحقق من التفسير الكامل هنا:

https://stackoverflow.com/a/4965145/951349.

من "لغة برمجة الهدف": "إعلان متغير ثابتة يحد من نطاقها إلى الفصل فقط - وإلى جزء من الفئة التي تم تنفيذها في الملف. (وبالتالي، لا يمكن تجميع المتغيرات الثابتة، أو التلاعب مباشرة بالمعالجات). "

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top