"কনস্ট্যান্ট এনএসএসস্ট্রিং *" প্রকারের 'এনএসএসটিং *' বাছাইয়ের যোগ্যতার প্যারামিটারে পাঠানো "সতর্কতা


353

আমার কাছে কনস্ট্যান্টস এনএসএসস্ট্রিং রয়েছে, যা আমি এই জাতীয় কল করতে চাই:

[newString isEqualToString:CONSTANT_STRING];

এখানে কোন ভুল কোড?

আমি এই সতর্কতা পেয়েছি:

'এনএসএসটিং *' টাইপ বাছাইপর্বের পরামিতিগুলিতে 'কনস্ট এনএসএসস্ট্রিং *' প্রেরণ করা হচ্ছে

এগুলি কীভাবে ঘোষণা করা উচিত?


2
এই স্ট্রিংগুলি কীভাবে সংজ্ঞায়িত করা হয়?

উত্তর:


916

নিম্নলিখিত হিসাবে আপনার ধ্রুব স্ট্রিং ঘোষণা করা উচিত:

NSString * const kSomeConstantString = @""; // constant pointer

পরিবর্তে:

const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";

পূর্ববর্তীটি কোনও NSStringবস্তুর কাছে ধ্রুবক পয়েন্টার হয় , তবে পরেরটি একটি ধ্রুবক NSStringবস্তুর পয়েন্টার হয় ।

একটি NSString * constকেস ব্যবহার আপনাকে কেসোম কনস্ট্যান্ট স্ট্রিংকে অন্য NSStringকোনও অবজেক্টের দিকে নির্দেশ করতে বাধা দিতে বাধা দেয় ।

পদ্ধতিটি isEqualToString:একটি যুক্তির প্রত্যাশা করে NSString *। আপনি যদি কোনও পয়েন্টারকে একটি ধ্রুব স্ট্রিং ( const NSString *) এ পাস করেন তবে আপনি এটির প্রত্যাশার চেয়ে আলাদা কিছু পার করছেন।

তদুপরি, NSStringবস্তুগুলি ইতিমধ্যে অপরিবর্তনীয়, তাই এগুলি তৈরি const NSStringকরা অর্থহীন।


3
আপনি বলেছিলেন যে প্রাক্তনটি কোনও এনএসএস স্ট্রিং অবজেক্টের ধ্রুবক পয়েন্টার। সুতরাং এর অর্থ পয়েন্টারটি ধ্রুবক। অতএব আমি অন্য এনএসএস স্ট্রিংয়ে এটি পুনরায় নিয়োগ করতে পারি না।
ব্যবহারকারী4951

8
আমি আপনাকে দশটি upvotes দিতে পারে আশা করি! আপনার বোধগম্য এবং খুব সহায়ক উত্তরের জন্য আপনাকে ধন্যবাদ!
কনস্টান্টিনো জারোহাস

1
পৃথিবীতে এনএসএসটিং * কনস্টে এনএসএসস্ট্রিংয়ের প্রতিবন্ধী কীভাবে? তাদের প্রসঙ্গ বিনামূল্যে ব্যাকরণ জেনারেটর কি?
user4951

3
@ জিম সমস্যাটি আপনার মধ্যে রয়েছে যে আপনি সিটি সঠিকভাবে শিখছেন না, অন্যকে দোষ দিবেন না। constকোয়ালিফায়ার তার বাম শব্দটি প্রযোজ্য, এবং তার ডান দিকে শব্দটি তার বাম দিকে (যেমন কিছুই আছে শুধুমাত্র যদি প্রযোজ্য const char *এবং একটি char const *const গৃহস্থালি অ const পয়েন্টার আছে, কিন্তু char *constঅ const গৃহস্থালি থেকে একটি const পয়েন্টার )।

8
+1 টি। এবং +1000 এর জন্য "এছাড়াও, এনএসএসস্ট্রিং অবজেক্টগুলি ইতিমধ্যে অপরিবর্তনীয়, সুতরাং এগুলি এনএসএসস্ট্রিংকে কনস্ট্যান্ট করা অর্থহীন।"
ম্যাডব্রেকস

6

কেবল স্ট্যাকওভারফ্লোতে বিভিন্ন পোস্টে পাওয়া সমস্ত জিনিস এক জায়গায় রাখার জন্য এবং আমার জন্য কাজ করে, # সংজ্ঞাটি খারাপ কারণ আপনি পরিবর্তনশীল ধরণের থেকে উপকার করতে পারবেন না, মূলত সংকলক যখন সংকলন করে তখন সমস্ত ঘটনা প্রতিস্থাপন করে (যখন প্রয়োজন কনস্ট্যান্টস্ হ'ল):

//  Constants.h
#import <Foundation/Foundation.h>

@interface Constants : NSObject

extern NSString *APP_STATE_LOGGED_IN;
extern NSString *APP_STATE_LOGGED_OUT;
@end

// Constants.m
#import <Foundation/Foundation.h>
#import "Constants.h"

@implementation Constants

NSString *APP_STATE_LOGGED_IN  = @"APP_STATE_LOGGED_IN";
NSString *APP_STATE_LOGGED_OUT = @"APP_STATE_LOGGED_OUT";
@end

5

এটি পড়তে কয়েক মিনিট অতিরিক্ত রাখুন। ধ্রুবক এবং তদ্বিপরীত উপর পয়েন্টার হেল উপর একটি ভাল পঠন।

http://c-faq.com/decl/spiral.anderson.html

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