إعلان، خصائص، توليف، وتنفيذ مجموعة int [] في الهدف ج

StackOverflow https://stackoverflow.com/questions/912016

سؤال

كيف تعلن، تعيين خصائص، توليف، وتنفيذ مجموعة int من الحجم 5 في الهدف ج؟ أنا أكتب هذا الرمز لتطبيق iPhone. شكرا.

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

المحلول

أعتقد أن الشيء "Cocoa-y" الذي يجب القيام به هو إخفاء صفيف Int حتى لو كنت تستخدمه داخليا. شيء مثل:

@interface Lottery : NSObject {
    int numbers[5];
}

- (int)numberAtIndex:(int)index;
- (void)setNumber:(int)number atIndex:(int)index;
@end

@implementation Lottery

- (int)numberAtIndex:(int)index {
    if (index > 4)
        [[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
    return numbers[index];
}

- (void)setNumber:(int)number atIndex:(int)index {
    if (index > 4)
        [[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
    numbers[index] = number;
}

نصائح أخرى

إليك شيء لمحاولةه. في ملف .h:

@property int* myIntArray;

ثم، في ملف .m:

@synthesize myIntArray;

إذا كنت تستخدم Synthesize، فستحتاج إلى Malloc / Calloc صفيف نفسك، وربما خلال INIT ().

بدلا من ذلك، يمكنك كتابة وظائف الملحق الخاصة بك ولديها malloc / calloc إذا تم الاتصال به قبل تخصيص الصفيف.

في كلتا الحالتين، سترغب في تحرير مجموعة الصفيف في طريقة Deallec ().

ربما يكون هذا ساذجا وخطأ، لأنني أسقط فقط على الهدف جيم، ولكن حتى الآن يبدو أنه يعمل من أجلي.

يجب أن لا تستخدم int في هذه الحالة إذا كنت ترغب في استخدام صفيف. استخدم NSNumber ووضع تلك الخمسة NSNUMBERS في nsmutablerray.

@interface testClass: NSObject {
     NSMutableArray* numbers;
}
@property (nonatomic, retain) NSMutableArray* numbers;
-(id)initWithValue:(NSNumber *)initialValue;
@end


@implementation testClass
@synthesize numbers;
-(id)initWithValue:(NSNumber *)initialValue {
     numbers = [[NSMutableArray alloc] initWithCapacity:5];
     [numbers addObject:initialValue];
     return self;
 }
@end

هو رمز الواجهة والتنفيذ مع توليف (غير اختبار BTW). ماذا تحاول تحقيقه؟

مقدمة سريعة جيدة

لدي متغير فئة:

NSInteger myInt[5];

بحيث يمكنني استخدام Myint Normal Myint [1] = 0 بناء جملة في التعليمات البرمجية الخاصة بي، قمت بإنشاء خاصية ترجع مؤشر عدد صحيح:

@property (nonatomic, readonly) NSInteger *myInt;

ثم أنشأت طريقة Getter التالية:

-(NSInteger *) myInt {
  return myInt
}

الآن يمكنني استخدام شيء مثل Class.myint [1] = 0؛

حسنا، لا أعرف من المؤكد أن هذا يعمل، لكن يبدو ذلك. اعتقدت فقط أنني سأضع هذا هناك إذا أراد شخص آخر تجربة ذلك.

مهما فعلت، يجب أن تكون على دراية بالعواقب.

مجموعة عدد صحيح غير مرجعي. أنت لا تعرف عدد الأشخاص الذين يصلون إليها. أنت لا تعرف من يجب أن يدل عليه ومتى. لذلك يمكنك بسهولة الحصول على خاصية من النوع الدولي *. سيقوم STERTER بتناول مؤشر وتخزينه في متغير المثيل. سيعود Getter محتويات متغير المثيل. انها تعمل فقط.

ومع ذلك، لا تعرف متى يجب تخصيص أو إلغاء تخصيص الصفيف. إذا كان لديك بعض المصفوفات الثابتة (على سبيل المثال أربعة جداول مختلفة تحتوي على أرقام)، لا مشكلة. ولكن إذا قمت بإنشاء مجموعة من الأعداد الصحيحة مع Malloc ()، يجب على شخص حر () ذلك. إذن متى سيحدث هذا؟

لأن الاضطرار إلى التعامل مع مدى الحياة من مجموعة يدويا هو القمامة، أود أن تستخدم إما لاستخدام nsarray من NSNumber، أو تنظر إلى nspointerarray والتي يمكن إساءة استخدامها لتخزين صفائف الأعداد الصحيحة مع عد المرجع، أو تقوم بإنشاء خاصة بك فئة مثل فئة اليانصيب في إجابة سابقة، فقط أكثر مرونة بعض الشيء.

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