চাপ দিয়ে সেটারকে ওভাররাইড করুন


108
@interface Article : NSObject 

@property (nonatomic, strong) NSString *imageURLString;

@end


@implementation Class

@synthesize imageURLString = _imageURLString;

- (void)setImageURLString:(NSString *)imageURLString {
    _imageURLString = imageURLString;
    //do something else
}

এআরসি সক্ষম থাকা অবস্থায় আমি কী সঠিকভাবে সেটারটিকে ওভাররাইড করেছিলাম?


2
হ্যাঁ, এটি আমার কাছে সঠিক দেখাচ্ছে। এটি কীভাবে আপনি প্রত্যাশা করছেন বা করবেন না তা কাজ করছে?
রবিন সামারহিল

উত্তর:


89

হ্যাঁ, এটি সঠিক। আমাকে সত্যিকার অর্থে কাজ করার জন্য এটি বিশ্বাস করতে কিছুটা সময় নিয়েছিল।

আপনি বুঝতে পারেন যে এই ক্ষেত্রে, ওভাররাইডটি প্রয়োজনীয় নয় কারণ আপনি উত্পন্ন উত্সাহী সেটারের চেয়ে বেশি কিছু করবেন না? আপনি যদি আরও কোড যুক্ত করেন তবেই আপনাকে setImageURLString:সেটারটিকে ওভাররাইড করতে হবে।


6
হ্যাঁ. আমি এটা বুঝতে পারি। আমি যেখানে আমার অতিরিক্ত কোড যুক্ত করতে চাই সেখানে মন্তব্য যুক্ত করি। উত্তরের জন্য আপনাকে অনেক ধন্যবাদ।
রোউইউম্যান

4
আপনি কি জানেন আকর্ষণীয় পরীক্ষাটি কী হবে? মন্তব্যের রঙ পরিবর্তন করা (এসও এবং অন্যান্য সাইট এবং আইডিই তে) ... সাধারণত এটি হালকা ধূসর বা এমন কিছু যা সামনে দাঁড়িয়ে না। # ff0000 হয়তো? এটি একটি পার্থক্য করা হবে? প্রোগ্রামার হিসাবে আমরা মন্তব্যগুলিকে উপেক্ষা করার জন্য ব্যবহৃত হয় যদি না আমরা নির্দিষ্টভাবে কীভাবে কীভাবে কাজ করে তা অনুমান করার চেষ্টা করি, সেক্ষেত্রে আমরা মাঝে মাঝে সেগুলি উপেক্ষাও করি।
maltalef

68

@ প্যাসাল দ্বারা প্রদত্ত উত্তরের প্রসারিত করে আমি কেবল যুক্ত করতে চাই যে এটি অবশ্যই করা সঠিক জিনিস এবং আপনি কোডটি কীভাবে সংকলন করে তা পরীক্ষা করে দেখতে পারেন। আমি কীভাবে চেক করতে হবে সে সম্পর্কে একটি ব্লগ পোস্ট লিখেছিলাম , তবে মূলত সেই কোডটি (এআরএমভি 7) এ সংকলিত হয়েছে:

        .align  2
        .code   16
        .thumb_func     "-[Article setImageURLString:]"
"-[Article setImageURLString:]":
        push    {r7, lr}
        movw    r1, :lower16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4))
        mov     r7, sp
        movt    r1, :upper16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4))
LPC7_0:
        add     r1, pc
        ldr     r1, [r1]
        add     r0, r1
        mov     r1, r2
        blx     _objc_storeStrong
        pop     {r7, pc}

উল্লেখ্য কলে _objc_storeStrongযা LLVM অনুযায়ী এই আছে:

id objc_storeStrong(id *object, id value) {
    value = [value retain];
    id oldValue = *object;
    *object = value;
    [oldValue release];
    return value;
}

সুতরাং, আপনার প্রশ্নের উত্তর দিতে, হ্যাঁ এটি ঠিক। এআরসি পুরানো মানটির সঠিক প্রকাশে যুক্ত করেছে এবং নতুন মান ধরে রাখে।

[সম্ভবত জটিল উত্তরের উপর সম্ভবত, তবে ভবিষ্যতে নিজের জন্য কীভাবে এআরসি সম্পর্কিত প্রশ্নের উত্তর দেওয়ার বিষয়ে আপনি যেতে পারেন তা দেখানো কার্যকর মনে হয়েছিল]


1
এর জন্য ধন্যবাদ, আমি আমার কোডটি (এবং এই উত্তর) দ্বিতীয়-অনুমান করছিলাম তবে আপনি আমার ভয়কে বিশ্রামে রেখেছেন।
ইভানফ্ল্যাশ

1
ধন্যবাদ ম্যাট ৪৩ তম ভোটার হওয়ায় এটি সঠিক মনে হয়নি, কারণ এই উত্তরের জন্য ৪২ টি এমন উপযুক্ত ভোট বলে মনে হয়েছিল।
বমুটার

1
সম্পত্তির অনুলিপি সেট করা থাকলে কী হবে? উদাহরণস্বরূপ @ প্রপার্টি (ননোটমিক, অনুলিপি) ইউআইসিআরএল * লাইন কালার; সেটার অভ্যন্তরে, আমি কি _ লাইন কালার = ইনপুট করতে পারি; বা আমাকে কি লাইনলাইন কালার = [ইনপুট অনুলিপি] করতে হবে ??
ড্যানিয়েল টি।

1
@DanielT। _lineColor = [input copy];হ্যাঁ, আপনাকে করতে হবে ।
ম্যাটজগ্লোলোয়

-10

কল

[super setImageURLString:theString];

এটাই


1
সুপারক্লাসে সেট ইমেজ ইউআরএল স্ট্রিংয়ের বাস্তবায়ন হওয়ার সম্ভাবনা নেই:
উইল

এমনকি যদি এটি করা হয় তবে এটি সম্ভবত এমন জিনিসগুলি করবে যা আপনি এটি করতে চান না।
নেট সিমের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.